//如何獲取Class的實例(4種) @Test public void test4() throws ClassNotFoundException{ //1.調用運行時類本身的.class屬性 Class clazz1 = Person.class; System.out.println(clazz1.getName()); Class clazz2 = String.class; System.out.println(clazz2.getName()); //2.通過運行時類的對象獲取 Person p = new Person(); Class clazz3 = p.getClass(); System.out.println(clazz3.getName()); //3.通過Class的靜態方法獲取.通過此方式,體會一下,反射的動態性。 String className = "com.model.Person"; Class clazz4 = Class.forName(className); // clazz4.newInstance(); System.out.println(clazz4.getName()); //4.(了解)通過類的加載器 ClassLoader classLoader = this.getClass().getClassLoader(); Class clazz5 = classLoader.loadClass(className); System.out.println(clazz5.getName()); System.out.println(clazz1 == clazz3);//true System.out.println(clazz1 == clazz4);//true System.out.println(clazz1 == clazz5);//true } /* * java.lang.Class:是反射的源頭。 * 我們創建了一個類,通過編譯(javac.exe),生成對應的.class文件。之后我們使用java.exe加載(JVM的類加載器完成的) * 此.class文件,此.class文件加載到內存以后,就是一個運行時類,存在在緩存區。那么這個運行時類本身就是一個Class的實例! * 1.每一個運行時類只加載一次! * 2.有了Class的實例以后,我們才可以進行如下的操作: * 1)*創建對應的運行時類的對象 * 2)獲取對應的運行時類的完整結構(屬性、方法、構造器、內部類、父類、所在的包、異常、注解、...) * 3)*調用對應的運行時類的指定的結構(屬性、方法、構造器) * 4)反射的應用:動態代理 */