IT Share you

Java에서 클래스 리터럴이란 무엇입니까?

shareyou 2021. 1. 10. 19:22
반응형

Java에서 클래스 리터럴이란 무엇입니까?


로부터 자바 튜토리얼 :

마지막으로, 유형 이름을 취하고 " "를 추가하여 형성된 클래스 리터럴 이라는 특수한 유형의 리터럴도 있습니다 .class. 예 : String.class. 이것은 Class유형 자체를 나타내는 객체 (유형의 )를 참조합니다.

이 리터럴을 어떤 유형의 변수에 할당 할 수 있습니까?

가능하면 작은 예를 들어주세요.


Class<String> c = String.class;

이 작은 녀석들 중 한 명으로 무엇을 할 수 있는지 알아 보려면 Javadoc을java.lang.Class 확인하세요.


이를 이해하려면 StringClass 클래스 의 인스턴스 (객체) 라는 것을 이해해야합니다 . 문자열 리터럴 (예 : "I am a string.")은 String 클래스의 인스턴스 (객체)를 나타내는 표기법 인 반면, 클래스 리터럴 (예 : Hashtable.class)은 Class 클래스 의 인스턴스를 나타내는 표기법입니다 .


여기에있는 다른 좋은 답변 덕분에 그것이 무엇인지 알 수 있지만 다음과 같이 명확히 할 수있는 일반적인 사용 예가 있습니다.

    private static Logger log = Logger.getLogger(YourClassHere.class);

코드에서 알 수 있듯이 이것은 로깅 프레임 워크를 초기화하는 줄입니다 (이 예에서는 org.apache.log4j패키지를 사용하고 있지만 원칙은 다른 프레임 워크로 확장됩니다). getLogger()메서드에는 로깅되는 내용 (즉, 현재 개체의 클래스)을 알 수 있도록 클래스 리터럴이 필요합니다.


JLS 에 따르면

15.8.2 클래스 리터럴

클래스 리터럴은 클래스, 인터페이스, 배열 또는 기본 유형의 이름과 a .및 토큰 으로 구성된 표현식 class입니다. 클래스 리터럴의 유형은입니다 Class. void현재 인스턴스 클래스의 정의 클래스 로더에 의해 정의 된대로 명명 된 유형 (또는에 대해 )에 대해 Class 객체로 평가됩니다 .


클래스 리터럴에서 런타임 유형 토큰으로 몇 가지 일반적인 용도를 찾을 수 있습니다 .


리터럴 자체는 MyClass입니다. 작성 MyClass.class하면 클래스 객체에 대한 참조를 얻습니다. 작성 new MyClass()하면 리터럴을 사용하여 얻은 클래스 개체의 인스턴스를 가져옵니다 MyClass.class. 인스턴스에서를 호출하여 동일한 클래스 객체를 얻습니다 myClassInstance.getClass().

100 % 확실하지는 않지만 리터럴 자체는 어떤 변수에도 할당 할 수 없습니다. 할 수있는 일은 클래스 이름을 문자열로 가져오고 리플렉션 프레임 워크를 사용하여 인스턴스를 만드는 것입니다.


예를 들면 다음과 같습니다.

Class myClass = MyClass.class

또는

MyClass.class.getResourceAsStream("config.properties");

그것을 이해하기 위해서는, 당신은 이해 할 String입니다 instance (object)자사의 superclass (parent class) Object.

class String"S instance (object)"의 값은이다 String literal(예 "I am a string.") :

class   |  instance (object) |  literal
------------------------------------------------
String  |  instance_name  =  |  "I am a string."

반면, class Object'S instance (object)'의 값은이다 Class literal(예 - Hashtable.class)을 의미하는 class Hashtable'들instance (object)

class      |  instance (object) |  literal
------------------------------------------------
Hashtable  |  instance_name     |  Hashtable.

JVM이 애플리케이션 클래스를로드 할 때이를 java.class.Class객체 로 저장합니다 .

따라서 일반적으로 Class클래스를 나타내는 메모리 유형의 인스턴스가 여러 개 있습니다. 따라서 다음과 같이 할 수 있습니다.

Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class
bicycleClass.getName();  // returns your class name
bicycleClass.getDeclaredMethods();  // returns your (declared) class methods

package training;

import java.lang.reflect.Method;

public class Training {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Class<Training> myclass = Training.class;
        Method[] myclassarr = myclass.getDeclaredMethods();
        System.out.println(myclass);
        System.out.println(myclass.getName());
        for (int i = 0; i < myclassarr.length; i++) {
            System.out.println(myclassarr[i]);
        }
        System.out.println();
        Class<String> strobj = String.class;
        System.out.println(strobj);
        System.out.println(strobj.getName());
        Method[] strobjarr = strobj.getDeclaredMethods();
        for (int j = 0; j < strobjarr.length; j++) {
            System.out.println(strobjarr[j]);
        }
    }

    public void MethodA() {

    }

    public static void MethodB() {

    }
}

산출:

class training.Training
training.Training
public static void training.Training.main(java.lang.String[])
public void training.Training.MethodA()
public static void training.Training.MethodB()

class java.lang.String
java.lang.String
public boolean java.lang.String.equals(java.lang.Object)
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.indexOf(java.lang.String,int)
public int java.lang.String.indexOf(java.lang.String)
public int java.lang.String.indexOf(int,int)
public int java.lang.String.indexOf(int)
static int java.lang.String.indexOf(char[],int,int,char[],int,int,int)
static int java.lang.String.indexOf(char[],int,int,java.lang.String,int)
public static java.lang.String java.lang.String.valueOf(int)
public static java.lang.String java.lang.String.valueOf(long)
public static java.lang.String java.lang.String.valueOf(float)
public static java.lang.String java.lang.String.valueOf(boolean)
public static java.lang.String java.lang.String.valueOf(char[])
public static java.lang.String java.lang.String.valueOf(char[],int,int)
public static java.lang.String java.lang.String.valueOf(java.lang.Object)
public static java.lang.String java.lang.String.valueOf(char)
public static java.lang.String java.lang.String.valueOf(double)
public char java.lang.String.charAt(int)
private static void java.lang.String.checkBounds(byte[],int,int)
public int java.lang.String.codePointAt(int)
public int java.lang.String.codePointBefore(int)
public int java.lang.String.codePointCount(int,int)
public int java.lang.String.compareToIgnoreCase(java.lang.String)
public java.lang.String java.lang.String.concat(java.lang.String)
public boolean java.lang.String.contains(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.StringBuffer)
public static java.lang.String java.lang.String.copyValueOf(char[])
public static java.lang.String java.lang.String.copyValueOf(char[],int,int)
public boolean java.lang.String.endsWith(java.lang.String)
public boolean java.lang.String.equalsIgnoreCase(java.lang.String)
public static java.lang.String java.lang.String.format(java.util.Locale,java.lang.String,java.lang.Object[])
public static java.lang.String java.lang.String.format(java.lang.String,java.lang.Object[])
public void java.lang.String.getBytes(int,int,byte[],int)
public byte[] java.lang.String.getBytes(java.nio.charset.Charset)
public byte[] java.lang.String.getBytes(java.lang.String) throws java.io.UnsupportedEncodingException
public byte[] java.lang.String.getBytes()
public void java.lang.String.getChars(int,int,char[],int)
void java.lang.String.getChars(char[],int)
private int java.lang.String.indexOfSupplementary(int,int)
public native java.lang.String java.lang.String.intern()
public boolean java.lang.String.isEmpty()
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.CharSequence[])
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.Iterable)
public int java.lang.String.lastIndexOf(int)
public int java.lang.String.lastIndexOf(java.lang.String)
static int java.lang.String.lastIndexOf(char[],int,int,java.lang.String,int)
public int java.lang.String.lastIndexOf(java.lang.String,int)
public int java.lang.String.lastIndexOf(int,int)
static int java.lang.String.lastIndexOf(char[],int,int,char[],int,int,int)
private int java.lang.String.lastIndexOfSupplementary(int,int)
public int java.lang.String.length()
public boolean java.lang.String.matches(java.lang.String)
private boolean java.lang.String.nonSyncContentEquals(java.lang.AbstractStringBuilder)
public int java.lang.String.offsetByCodePoints(int,int)
public boolean java.lang.String.regionMatches(int,java.lang.String,int,int)
public boolean java.lang.String.regionMatches(boolean,int,java.lang.String,int,int)
public java.lang.String java.lang.String.replace(char,char)
public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence)
public java.lang.String java.lang.String.replaceAll(java.lang.String,java.lang.String)
public java.lang.String java.lang.String.replaceFirst(java.lang.String,java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String)
public java.lang.CharSequence java.lang.String.subSequence(int,int)
public java.lang.String java.lang.String.substring(int)
public java.lang.String java.lang.String.substring(int,int)
public char[] java.lang.String.toCharArray()
public java.lang.String java.lang.String.toLowerCase(java.util.Locale)
public java.lang.String java.lang.String.toLowerCase()
public java.lang.String java.lang.String.toUpperCase()
public java.lang.String java.lang.String.toUpperCase(java.util.Locale)
public java.lang.String java.lang.String.trim()

참조 URL : https://stackoverflow.com/questions/2160788/what-is-a-class-literal-in-java

반응형