java反射專題一

來源:互聯網
上載者:User

標籤:adc   size   反射   for   記憶體   pre   .class   泛型   產生   

一丶Class的理解
        /*         * Class類是反射的源頭         * 建立一個類,通過編譯(javac.exe),產生對應的.class檔案,之後使用java.exe載入(JVM的類載入器完成的)此.class檔案。         * 此.class檔案載入到記憶體後,就是一個運行時類,存放在緩衝區。         * 那麼這個運行時類本身就是一個Class的執行個體。         * 1.每一個運行時類只載入一次;         * 2.有了Class的執行個體後,可以進行如下操作:         *    1>建立對應的運行時類的對象         *    2>擷取對應的運行類的完整結構(屬性、方法、構造器、內部類、父類、所在的包、異常、註解、...)         *    3>調用對應的運行時類指定的結構(屬性、方法、構造器)         *    4>反射的應用:動態代理         */

 

一丶獲得Class對象的方法

1)通過類的靜態屬性class獲得

Class clazz = Person.class;

2)通過運行時類的getClass方法獲得

        Person person = new Person();        Class clazz = person.getClass();    

3)通過Class的靜態方法獲得

        String className = "hello.Person";//運行時類的完全限定名        Class clazz = Class.forName(className);

4)通過類的載入器獲得(瞭解)

        String className = "hello.Person";//類的完全限定名        ClassLoader classLoader = this.getClass().getClassLoader();        Class clazz = classLoader.loadClass(className);

  

二丶通過Class對象建立對應的運行時類的執行個體對象
        Class clazz = Person.class;//沒有使用泛型,預設是object類型的class對象        Person person = (Person) clazz.newInstance();  //需要強轉,該方法預設調用運行時類的無參構造方法,所以類必須有無參構造方法,無參構造方法許可權夠大        Class<Person> clazz1 = Person.class;//使用了泛型指定是Person類型的class對象        Person person1 = clazz1.newInstance();//不需要強轉

 

java反射專題一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.