우리는 이미 클래스가 복잡한 데이터 유형이라는 사실에 대해 이야기했습니다. 이제 클래스의 다른 측면인 Java 머신에서 클래스를 처리하는 방법에 대해 조금 이야기해 보겠습니다. Java에서는 모든 것이 개체, 심지어 클래스라는 점을 기억하십시오. 클래스는 객체입니다. 그게 당신을 놀라게합니까? 그럼 계속 갑시다.

메모리에 클래스 로드

실제로 클래스가 메모리에 로드되면 세 가지 특수 "객체"가 생성됩니다.

메모리에 클래스 로드

그림에 대한 간략한 설명:

노란색 직사각형:

코드 파일은 ".class" 확장자를 가진 파일로 디스크에 저장됩니다. 여기에는 클래스, 해당 필드 및 메소드에 대한 정보와 바이트코드로 컴파일된 메소드의 소스 코드가 포함됩니다.

주황색 사각형:

Java 기계가 클래스를 메모리에 로드할 때 바이트 코드를 컴퓨터의 프로세서 및 운영 체제에 특정한 기계 코드로 컴파일합니다. Java 머신만이 이 머신 코드에 액세스할 수 있습니다. Java 프로그래머로서 우리는 그것에 접근할 수 없습니다.

녹색 사각형:

Java 머신은 클래스의 모든 정적 변수와 메소드를 포함하는 객체를 생성합니다. 클래스 이름을 사용하여 이 "객체"에 액세스합니다.

예를 들어 를 작성할 때 클래스 에 있는 정적 변수를 참조하는 것입니다 . 이 개체는 녹색 사각형입니다. 그리고 정적 변수가 저장되는 곳입니다 .java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

파란색 사각형:

Java 머신이 클래스의 코드를 메모리에 로드할 때 java.lang.Class로드된 클래스에 대한 정보(이름, 메소드 이름, 필드 이름 및 유형 등)를 저장하는 특수 객체를 생성합니다.

"클래스"라는 이름은 약간 혼란스러울 수 있습니다. 이 클래스는 로드된 클래스에 대한 일부 정보만 저장하므로 ClassInfo라고 부르는 것이 더 합리적입니다.

다음과 같은 명령을 사용하여 모든 유형의 Class 개체를 가져올 수 있습니다.

Class name = ClassName.class;

예:

암호 메모
Class a = String.class;
클래스 Class에 대한 정보가 있는 객체 가져오기String
Class b = Object.class;
클래스 Class에 대한 정보가 있는 객체 가져오기Object
Class c = Integer.class;
클래스 Class에 대한 정보가 있는 객체 가져오기Integer
Class d = int.class;
유형 Class에 대한 정보가 있는 객체 가져오기int
Class e = void.class;
유형 Class에 대한 정보가 있는 객체 가져오기void

getClass()각 개체에는 클래스에서 상속하는 메서드가 있으므로 모든 개체에서 클래스 설명 개체에 대한 참조를 가져올 수도 있습니다 Object.

예:

암호 메모
Class a = "Hello".getClass();
다음과 같은 객체String.class
Class b = new Integer().getClass();
다음과 같은 객체Integer.class
Class c = Boolean.TRUE.getClass();
다음과 같은 객체Boolean.class