1. 程式人生 > >理解Java反射機制

理解Java反射機制

ext 就是 概念 alt target private 一個 反射機制 語言

  看了知乎老頑童周伯通的回復和深入解析java反射關於反射的講解,終於對反射的概念有了新的認識。不再畫蛇添足了,轉載一下精華部分。

一、為什麽要用到反射?

技術分享圖片

假如你寫了一段代碼:Object o=new Object();

運行了起來!

首先JVM會啟動,你的代碼會編譯成一個.class文件,然後被類加載器加載進jvm的內存中,你的類Object加載到方法區中,創建了Object類的class對象到堆中,註意這個不是new出來的對象,而是類的類型對象

每個類只有一個class對象,作為方法區類的數據結構的接口。jvm創建對象前,會先檢查類是否加載,尋找類對應的class對象,若加載好,則為你的對象分配內存,初始化也就是代碼:new Object()。

以此,來理解反射在什麽場景下使用。

題主想想上面的程序對象是自己new的,程序相當於寫死了給jvm去跑。假如一個服務器上突然遇到某個請求哦要用到某個類,哎呀但沒加載進jvm,是不是要停下來自己寫段代碼,new一下,哦啟動一下服務器,(腦殘)!

作者:老頑童周伯通
鏈接:https://www.zhihu.com/question/24304289/answer/147529485
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 二、什麽是反射? 反射(Reflection)是Java 程序開發語言的特征之一,它允許運行中的 Java 程序獲取自身的信息,並且可以操作類或對象的內部屬性。
通過反射,我們可以在運行時獲得程序或程序集中每一個類型的成員和成員的信息。 程序中一般的對象的類型都是在編譯期就確定下來的,而Java反射機制可以動態地創建對象並調用其屬性,這樣的對象的類型在編譯期是未知的。 所以我們可以通過反射機制直接創建對象,即使這個對象的類型在編譯期是未知的。 三、反射的作用?

Java反射框架主要提供以下功能:

  • 1.在運行時判斷任意一個對象所屬的類;
  • 2.在運行時構造任意一個類的對象;
  • 3.在運行時判斷任意一個類所具有的成員變量和方法(通過反射甚至可以調用private方法);
  • 4.在運行時調用任意一個對象的方法
    重點:是運行時而不是編譯時

四、反射的基本運用

1、獲得Class對象

2、判斷是否為某個類的實例

3、創建實例

4、獲取方法

5、獲取構造器信息

6、獲取類的成員變量(字段)信息

7、調用方法

http://www.sczyh30.com/posts/Java/java-reflection-1/#%E4%B8%80%E3%80%81%E5%9B%9E%E9%A1%BE%EF%BC%9A%E4%BB%80%E4%B9%88%E6%98%AF%E5%8F%8D%E5%B0%84%EF%BC%9F

理解Java反射機制