樂字節Java反射之一:反射概念與獲取反射源頭class

1、Java反射機制概念

「程序運行時,容許改變程序結構或變量類型,這種語言稱爲動態語言」,如Python,
Ruby是動態語言;顯然C++,Java,C#不是動態語言,可是JAVA有着一個很是突出
的動態相關機制:Reflection。
 
JAVA反射機制是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方
法;對於任意一個對象,都可以調用它的任意一個方法和屬性;這種動態獲取的信息以
及動態調用對象的方法的功能稱爲java語言的反射機制。如
/**
 * 入門級示例:經過對象獲取  包名.類名
 * @author Administrator
 */
public class Simple {
    public static void main(String[] args) {
        Simple s=new Simple();
        System.out.println(s.getClass().getName());
    }
}

 

 
Java反射機制,能夠實現如下功能:
①在運行時判斷任意一個對象所屬的類;
②在運行時構造任意一個類的對象;
③在運行時判斷任意一個類所具備的成員變量和方法;
④在運行時調用任意一個對象的方法;
⑤生成動態代理。
 
相關的api爲:
 

2、 獲取源頭Class(重點)

打開權限:
add.setAccessible(true);
全部類的對象其實都是Class的實例。這個Class實例能夠理解爲類的模子,就是包含了類的結構信息,相似於圖紙。咱們平常生活中,須要創造一個產品,如想山寨一個iphone手機,怎麼辦?
 
 
有三種方式能夠實現:
⑴買個iphone手機,拆的七零八落的,開始山寨;
⑵到iphone工廠參觀,拿到iphone磨具,開始山寨;
⑶跑到美國盜取iphone的圖紙,開始山寨,最後一種最暴力,最爽。
 
序列化:實現serializable接口,
反序列化
克隆:實現cloneable接口,重寫clone()方法,修改權限爲public
New 反射
同理,獲取類的class對象,也有三種方式:
①Class.forName(」包名.類名」)//通常儘可能採用該形式
②類.class
③對象.getClass()
示例以下:
public class Source {
    public static void main(String[] args) {
        //第一種方式:對象.class
        Source s=new Source();
        Class<?>c1=s.getClass();
        //第二種方式:類.class
        Class<?>c2=Source.class;
        //第三種方式(推薦方式):Class.forName()
        Class<?>c3=null;
        try {
            c3=Class.forName("com.shsxt.ref.simple.Source");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println(c1.getName());
        System.out.println(c2.getName());
        System.out.println(c3.getName());
    }
}
 
有了class對象,咱們就有了一切,這就是反射的源頭,接下來就是「庖丁解牛」。
歡迎繼續關注樂字節Java課程,樂字節原創,學Java,小樂來幫您。
相關文章
相關標籤/搜索