[java] Java에서 .class는 무엇을 의미합니까?

.classJava에서 무엇을 의미합니까? 예를 들어,이라는 클래스를 만든 경우 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

클래스에 대한 docs.oracle.com 참조


답변

명확히하기 위해이 ‘.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