反射獲取類的實例的4種方法


   //如何獲取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)反射的應用:動態代理
     */

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM