Java反射之一:反射概念與獲取反射源頭Class

Java反射機制概念

「程序運行時,容許改變程序結構或變量類型,這種語言稱爲動態語言」,如Python,Ruby是動態語言;顯然C++,Java,C#不是動態語言,可是JAVA有着一個很是突出的動態相關機制:Reflection。java

JAVA反射機制是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方法;對於任意一個對象,都可以調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱爲java語言的反射機制。api

如:iphone

/**
 * 入門級示例:經過對象獲取  包名.類名
 * @author Administrator
 */
public class Simple {
 public static void main(String[] args) {
  Simple s=new Simple();
  System.out.println(s.getClass().getName());
 }
}

Java反射機制,能夠實現如下功能:學習

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

②在運行時構造任意一個類的對象;代理

③在運行時判斷任意一個類所具備的成員變量和方法;code

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

⑤生成動態代理。blog

相關的api爲接口

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mWvKvsKd-1597755624260)(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)]

獲取源頭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對象,咱們就有了一切,這就是反射的源頭,接下來就是「庖丁解牛」。

out.println(c2.getName());

System.out.println(c3.getName());
}

}

有了class對象,咱們就有了一切,這就是反射的源頭,接下來就是「**庖丁解牛**」。

**PS:獲取學習資源技術乾貨:lezijie007(暗號66)**
相關文章
相關標籤/搜索