在 Java 中,獲取一個類的Class
對象有多種方式。Class
對象代表了 Java 中的一個類或接口的運行時類信息,可以用于反射操作。以下是獲取Class
對象的幾種常見方法:
1.使用.class
屬性
每個類都有一個.class
屬性,可以直接獲取該類的Class
對象。
示例代碼
public class MyClass {public static void main(String[] args) {Class<MyClass> clazz = MyClass.class;System.out.println("Class object: " + clazz);}
}
2.使用對象的.getClass()
方法
任何 Java 對象都有一個.getClass()
方法,可以獲取該對象的Class
對象。
示例代碼
public class MyClass {public static void main(String[] args) {MyClass obj = new MyClass();Class<?> clazz = obj.getClass();System.out.println("Class object: " + clazz);}
}
3.使用完全限定類名調用Class.forName()
Class.forName()
方法可以通過類的完全限定名來獲取Class
對象。這種方法在加載類時會觸發類的初始化。
示例代碼
public class MyClass {public static void main(String[] args) {try {Class<?> clazz = Class.forName("com.example.MyClass");System.out.println("Class object: " + clazz);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
4.使用.getClassLoader().loadClass()
ClassLoader.loadClass()
方法也可以通過類的完全限定名來加載類并獲取Class
對象。與Class.forName()
不同,loadClass()
不會觸發類的初始化。
示例代碼
public class MyClass {public static void main(String[] args) {try {ClassLoader classLoader = MyClass.class.getClassLoader();Class<?> clazz = classLoader.loadClass("com.example.MyClass");System.out.println("Class object: " + clazz);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
5.使用.getDeclaredClass()
方法(Java 9+)
從 Java 9 開始,Class
類提供了一個新的方法getDeclaredClass()
,可以獲取類的Class
對象。
示例代碼
public class MyClass {public static void main(String[] args) {try {Class<?> clazz = Class.getDeclaredClass("com.example.MyClass");System.out.println("Class object: " + clazz);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}
6.使用.getDeclaredConstructor()
和.newInstance()
(間接獲取)
雖然這種方法不是直接獲取Class
對象,但可以通過創建對象來間接獲取Class
對象。
示例代碼
import java.lang.reflect.Constructor;public class MyClass {public static void main(String[] args) {try {Constructor<MyClass> constructor = MyClass.class.getDeclaredConstructor();constructor.setAccessible(true);MyClass instance = constructor.newInstance();Class<?> clazz = instance.getClass();System.out.println("Class object: " + clazz);} catch (Exception e) {e.printStackTrace();}}
}
總結
以下是獲取Class
對象的幾種常見方法:
? 使用.class
屬性:直接獲取類的Class
對象。
? 使用對象的.getClass()
方法:通過對象獲取其Class
對象。
? 使用Class.forName()
:通過類的完全限定名獲取Class
對象,會觸發類的初始化。
? 使用ClassLoader.loadClass()
:通過類的完全限定名加載類,不會觸發類的初始化。
? 使用Class.getDeclaredClass()
(Java 9+):通過類的完全限定名獲取Class
對象。
? 通過創建對象間接獲取:使用反射創建對象后,通過對象的.getClass()
方法獲取Class
對象。
根據你的具體需求,可以選擇合適的方法來獲取Class
對象。