.class
Java에서 무엇을 의미합니까? 예를 들어,이라는 클래스를 만든 경우 Print
. 무엇을 Print.class
반환합니까?
답변
당신이 쓸 때 .class
– 클래스 이름 후에는 클래스 리터럴 참조하는
java.lang.Class
객체 정보 표현 에 대해 지정된 클래스를.
예를 들어, 클래스 인 경우 Print
, 다음 Print.class
클래스 나타내는 개체입니다 Print
런타임에 있습니다. 의 getClass()
(직접) 인스턴스의 메소드에 의해 리턴되는 동일한 오브젝트 입니다 Print
.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
답변
.class
사용 가능한 클래스의 인스턴스가 없을 때 사용됩니다.
.getClass()
사용 가능한 클래스의 인스턴스가있을 때 사용됩니다.
object.getClass()
주어진 객체의 클래스를 반환합니다.
예를 들면 다음과 같습니다.
String string = "hello";
System.out.println(string.getClass().toString());
출력됩니다 :
class java.lang.String
이것은 문자열 객체의 클래스입니다 🙂
답변
객체의 인스턴스가 사용 가능한 경우 클래스를 얻는 가장 간단한 방법은 호출하는 것입니다. Object.getClass()
.class
구문
유형이 사용 가능하지만 인스턴스가없는 경우 .class
유형의 이름을 추가 하여 클래스를 얻을 수 있습니다. 이것은 또한 기본 유형에 대한 클래스를 얻는 가장 쉬운 방법입니다.
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
답변
명확히하기 위해이 ‘.class’메소드는 Java 코드를 컴파일 한 후 표시되는 바이트 코드 파일이나 OOP 이론의 Class vs. Object 개념 사이의 혼란을 언급하지 않습니다.
이 ‘.class’메소드는 Java에서 코드 리플렉션에 사용됩니다. 일반적으로 정규화 된 클래스 이름, 상수 목록, 공용 필드 목록 등과 같은 클래스의 메타 데이터를 수집 할 수 있습니다.
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html https://docs.oracle.com/javase/8/docs 링크를 확인하십시오 (이미 언급 됨).
/api/java/lang/Class.html
일반적으로 프로젝트 빌드를 시작할 때 리플렉션을 즉시 사용할 계획이 없습니다. 이미 작동하는 코드를 관리하려고 시도한 후에 필요한 것입니다. 프로그램의 여러 인스턴스를 관리하려면 여러 번 필요합니다. 특정 ‘복제본’을 식별하여 무언가가 이미 정의되어 있는지 확인하거나 함수 수를 계산하거나 단순히 클래스의 특정 인스턴스에 대한 세부 정보를 기록하려고 할 수 있습니다.
답변
사용 가능한 인스턴스가없는 경우 .class
구문은 클래스의 해당 Class 객체를 가져 오는 데 사용됩니다. 그렇지 않으면 getClass () 메서드를 사용하여 Class 객체를 가져올 수 있습니다. 기본 데이터 유형의 인스턴스가 없으므로 기본 데이터 유형에 .class
구문 을 사용해야 합니다.
package test;
public class Test {
public static void main(String[] args)
{
//there is no instance available for class Test, so use Test.class
System.out.println("Test.class.getName() ::: " + Test.class.getName());
// Now create an instance of class Test use getClass()
Test testObj = new Test();
System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName());
//For primitive type
System.out.println("boolean.class.getName() ::: " + boolean.class.getName());
System.out.println("int.class.getName() ::: " + int.class.getName());
System.out.println("char.class.getName() ::: " + char.class.getName());
System.out.println("long.class.getName() ::: " + long.class.getName());
}
}
답변
여기서 핵심은 클래스와 객체의 차이점을 이해하는 것입니다. 객체는 클래스의 인스턴스입니다. 그러나 완전한 객체 지향 언어에서 Class는 Object 입니다. 따라서 호출 .class
은 해당 클래스의 클래스 객체에 대한 참조를 가져 와서 조작 할 수 있습니다.
답변
클래스 리터럴은 클래스 이름, 인터페이스, 배열 또는 기본 유형 또는 의사 유형의 공백과 ‘.’로 구성되는 표현식입니다. 그리고 토큰 클래스. JDK 5.0의 변경 사항 중 하나는 java.lang.Class 클래스가 일반 java.lang.Class Class<T>
이므로 다음과 같습니다.
Class<Print> p = Print.class;
여기에 참조 :
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
http://docs.oracle.com/javase/tutorial/extra/generics/literals.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2