反射是 Java 動態性的核心,獲取 Class 對象是反射的起點。共有三種標準途徑:
類名.classClass<Integer> cla = Integer.class;
最簡潔、編譯期可檢查、性能最佳。
Class.forName("全限定類名")Class<?> cla2 = Class.forName("java.lang.Integer");
動態加載,常用於配置驅動類名(如 JDBC 驅動)。會拋出 ClassNotFoundException。
getClass() 方法Class<? extends Integer> cla3 = new Integer(0).getClass();
通過已有實例獲取,適用於運行時類型未知的場景。
public void demo() throws ClassNotFoundException {
// 方式一
Class<Integer> c1 = Integer.class;
// 方式二
Class<?> c2 = Class.forName("java.lang.Integer");
// 方式三
Class<? extends Integer> c3 = new Integer(42).getClass();
System.out.println(c1 == c2); // true,同一類加載器下 Class 對象唯一
System.out.println(c2 == c3); // true
}
setAccessible 陷阱未完待續...