java.lang.Class<T> -- 反射機制

來源:互聯網
上載者:User

標籤:serial   ace   last   sub   tco   dex   getc   sys   void   

1反射機制是什麼

反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。

2反射機制能做什麼

反射機制主要提供了以下功能: 

  • 在運行時判斷任意一個對象所屬的類;

  • 在運行時構造任意一個類的對象;

  • 在運行時判斷任意一個類所具有的成員變數和方法;

  • 在運行時調用任意一個對象的方法;

  • 產生動態代理。

3反射機制的相關API通過一個對象獲得完整的包名和類名
package edu.pri.lime.test;public class TestReflect {    public static void main(String[] args){        TestReflect reflect = new TestReflect();//        通過一個對象獲得完整的包名和類名        System.out.println(reflect.getClass().getName());    }}
執行個體化Class類對象
package edu.pri.lime.test;public class TestReflect {    public static void main(String[] args) throws ClassNotFoundException{                Class<?> clazzA = Class.forName("edu.pri.lime.test.TestReflect");        Class<?> clazzB = new TestReflect().getClass();        Class<?> clazzC = TestReflect.class;                System.out.println(clazzA.getName());        System.out.println(clazzB.getName());        System.out.println(clazzC.getName());    }}
擷取一個對象的父類與實現的介面
package edu.pri.lime.test;import java.io.Serializable;public class TestReflect implements Serializable{    private static final long serialVersionUID = -3407476067923921222L;    public static void main(String[] args) throws ClassNotFoundException{                Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");//        擷取父類        Class<?> clazzSup = clazz.getSuperclass();        System.out.println(clazzSup.getName());        //        擷取所有介面        Class<?> clazzInte[] = clazz.getInterfaces();        for(Class<?> in : clazzInte){            System.out.println(in.getName());        }    }}
擷取某個類中的全部建構函式
package edu.pri.lime.test;import java.io.Serializable;import java.lang.reflect.Constructor;import java.lang.reflect.Modifier;public class TestReflect implements Serializable{    private static final long serialVersionUID = -3407476067923921222L;    private int id;    private String name;    public TestReflect() {        super();        // TODO Auto-generated constructor stub    }    public TestReflect(int id) {        super();        this.id = id;    }    public TestReflect(String name) {        super();        this.name = name;    }    public TestReflect(int id, String name) {        super();        this.id = id;        this.name = name;    }    public static void main(String[] args) throws ClassNotFoundException{                Class<?> clazz = Class.forName("edu.pri.lime.test.TestReflect");//        擷取所有建構函式        Constructor<?>[] constructors = clazz.getConstructors();        for(Constructor<?> con : constructors){//            擷取建構函式所有參數類型            Class<?>[] paramTypes = con.getParameterTypes();            System.out.print(Modifier.toString(con.getModifiers()) + " ");            System.out.print(con.getName() + "(");            for(int i = 0;i < paramTypes.length;i++){                if(i < paramTypes.length - 1){                    System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1) + ",");                }else{                    System.out.print(paramTypes[i].getName().substring(paramTypes[i].getName().lastIndexOf(".") + 1));                }            }            System.out.println(");");        }    }}
通過反射機制執行個體化一個類的對象

java.lang.Class<T> -- 反射機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.