學習心得:Java為什麼支援反射機制?

來源:互聯網
上載者:User
Java為什麼能夠支援Reflection?答案是Java運行時仍然擁有類型資訊,它包含了這個類一切:它有哪些欄位、哪些方法,各是何種保護層級等等,還有這個類依賴於哪些類。在Java中,類資訊以對象的形式存放,這些對象是一種元對象,它們的類型就是Class。擁有了這些資訊,無論是動態建立對象還是調用某些方法都是輕而易舉。在C++中,通過RTTI(運行時類型識別),我們也可以知道類的一些資訊,但為什麼C++中卻沒有Reflection,原因是類型資訊不完整。RTTI這個名字本身就告訴我們,C++的類型資訊是用來進行類型識別的,因此,它也不需要其它額外的資訊。並不是C++無法做到這一點,而是C++不希望給使用者增加額外的負擔。有所得,必然有所失,因此,C++放棄了元對象。關於這一點,C++之父Bjarne Stroustrup在他的《C++語言的設計與演化》的14.2.8節中進行了深入的討論。
        元對象是Java Reflection的物質基礎,那它的精神基礎又是什麼呢?Java為什麼要支援Reflection?經過上面的討論,我們把這個問題再進一步,為什麼Java要提供元對象?
        討論這個問題,我們還要拉回到十年前,那時Java剛剛來到正式登上曆史的舞台。Java實際上誕生在這之前的數年,那時候還叫Oak,環境所限使得這一划時代的傑作甫一出爐便被束之高閣。當Netscape掀起了為網路大戲的序幕,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.