- 通过类的全限定名使用
Class.forName()
方法:
- 示例代码:
Class<?> clazz = Class.forName("com.example.MyClass");
- 适用场景:当你只知道类的全限定名(包名 + 类名),并且需要在运行时动态加载类。常用于配置文件中指定类名,根据配置来加载不同的类,如数据库驱动的加载(
Class.forName("com.mysql.cj.jdbc.Driver");
)。
- 使用类的
.class
语法:
- 示例代码:
Class<MyClass> clazz = MyClass.class;
- 适用场景:在编译期就已经明确知道要获取的类,常用于获取当前类的相关信息,或者获取常量类、工具类等在代码中经常使用到的类的信息。这种方式简单直接,而且性能较高,因为类在编译时就已经确定。
- 通过对象的
getClass()
方法:
MyClass obj = new MyClass();
Class<? extends MyClass> clazz = obj.getClass();
- **适用场景**:当你已经有一个对象实例,需要获取该对象实际类型的`Class`对象。常用于运行时根据对象的实际类型进行一些动态操作,比如在多态情况下,判断对象具体属于哪个类,进而执行不同的逻辑。