首頁  >  文章  >  Java  >  java什麼是反射機制

java什麼是反射機制

(*-*)浩
(*-*)浩原創
2019-11-11 10:37:265478瀏覽

Java 反射機制是在運行狀態中,對於任意一個類,都能夠獲得這個類別的所有屬性和方法,對於任意一個物件都能夠呼叫它的任意一個屬性和方法。

java什麼是反射機制

這種執行階段動態的獲取資訊以及動態呼叫物件的方法的函數稱為Java的反射機制。            (建議學習:java課程

Class 類別與java.lang.reflect 類別庫一起對反射的概念進行了支持,該類別庫包含了Field,Method, Constructor 類別(每個類別都實作了Member 介面)。這些類型的物件時由 JVM 在運行時建立的,用以表示未知類別裡對應的成員。

這樣你就可以使用 Constructor 建立新的對象,用 get() 和 set() 方法讀取和修改與 Field 物件關聯的字段,用 invoke() 方法呼叫與 Method 物件關聯的方法。

另外,還可以呼叫 getFields() getMethods() 和 getConstructors() 等很便利的方法,以傳回表示字段,方法,以及建構器的物件的陣列。這樣匿名物件的資訊就能在執行時完全確定下來,而在編譯時不需要知道任何事情。

透過反射機制取得類別資訊

透過反射機制創建對象,在創建對象之前要獲得對象的建構函數對象,透過建構函式對象創建對應類別的實例。

下面這段程式碼分別在運行期間創建了一個無參與有參的物件實例。由於 getConstructor() 方法與 newInstance() 方法拋出了很多異常 (你可以透過原始碼查看它們),這裡就簡寫了直接拋出一個 Exception,下同。

package com.jas.reflect;

import java.lang.reflect.Constructor;

public class ReflectTest {
    public static void main(String[] args) throws Exception {

        Class clazz = null;
        clazz = Class.forName("com.jas.reflect.Fruit");
        Constructor<Fruit> constructor1 = clazz.getConstructor();
        Constructor<Fruit> constructor2 = clazz.getConstructor(String.class);

        Fruit fruit1 = constructor1.newInstance();
        Fruit fruit2 = constructor2.newInstance("Apple");

    }
}

class Fruit{
    public Fruit(){
        System.out.println("无参构造器 Run...........");
    }
    public Fruit(String type){
        System.out.println("有参构造器 Run..........." + type);
    }

}

輸出:

无参构造器 Run...........
有参构造器 Run...........Appl

以上是java什麼是反射機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn