精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java安全 | 反射看這一篇就夠了

開發 前端
我們可以將Java這種靜態語?附加上動態特性,換句話說,就是反射機制是Java實現動態語言的關鍵,也就是通過反射實現類動態加載。怎么理解呢,就是在運行時加載需要的類,如果運行時不用該類,則不報錯,降低了依賴性。

什么是反射?

Java安全可以從反序列化漏洞說起,反序列化漏洞又可以從反射說起。反射是大多數語言里都必不可少的組成部分,對象可以通過反射獲取他的類,類可以通過反射拿到所有?法(包括私有),拿到的?法可以調?,總之通過“反射”,我們可以將Java這種靜態語?附加上動態特性??赡苷f完這一兩句話大家還是不知道反射是個啥玩意,現在為了讓大家容易理解,先為大家提出一個需求,通過這個需要來引出反射。需求如下:

根據配置文件re.properties指定信息,創建對象并調用方法。

classfullpath=com.lxflxf.Cat

method=hi

這樣的需求在學習框架時很多,即在通過外部文件配置,在不修改源碼的情況下,來控制程序。

我們使用現有技術可以做到嗎?咱們可以動手寫一下。

首先創建配置文件,寫入上述內容,然后創建一個類,寫入如下內容:

public class Cat {

private String name = "小貓";

public void hi(){
System.out.println("hi" + name);
}
}

傳統的方法是不是我們可以先new一個對象,然后再調用它的方法。寫法如下:

Cat cat = new Cat();
cat.hi();

通過傳統方法,確實可以調用hi()方法,但是這和我們的需求不一樣,這里我們是要根據配置文件re.properties指定信息來完成。到了這里,有同學就說了,咱們可以通過IO流的方式來讀取配置文件的信息。好,咱們用代碼來寫一下。

使用Properties來讀寫配置文件。案例代碼如下:

Properties properties = new Properties();
properties.load(new FileInputStream("src//re.properties"));
String classfullpath = properties.get("classfullpath").toString();
String methodName = properties.get("method").toString();
System.out.println("classfullpath" + classfullpath);
System.out.println("methodName=" + methodName);

運行一下,發現成功讀取到內容。

然后需要創建對象,怎么創建對象呢?有同學就說了,咱們可以直接new classfullpath,這樣不就好了嘛?嗯,想法不錯,下回不要想了。不要忘記了,我們現在的classfullpath可是字符串類型,怎么能去new呢。所以現有技術是做不到這個事情的。那么這里就要引入我們要將的重點——反射機制。

為了能更好的理解反射,這里先寫一個小案例,然后在去解釋。

第一步、加載類,返回Class類型的對象cls。

Class cls = Class.forName(classfullpath);

第二步、通過cls得到你加載的類 com.lxflxf.Cat 的對象實例。

Object o = cls.newInstance();

可能有同學會問,你怎么知道這里拿到的是com.lxflxf.Cat呢,我們可以打印一下來看看,System.out.println(o.getClass())輸出結果如下:

第三步、通過cls得到你加載的類 com.lxflxf.Cat 的 methodName 的方法對象,我們可以在反射中,把方法視為對象。

Method method1 = cls.getMethod(methodName);

最后、通過method1調用方法、也就是通過方法對象來實現調用方法。

method1.invoke(o);

在這里我們也能發現反射和傳統方法的區別了,傳統方法是對象.方法(),反射中呢,是方法.invoke(對象)。那我們運行一下,看看能否輸出方法里的內容呢,如下:

說到這里大家腦海里應該也有了反射的概念。其實反射機制還有一個優點,那就是可以通過外部文件配置,在不修改源碼的情況下,來控制程序。比如這里,我在Cat類下面再寫一個方法,cry()方法,代碼如下:

public void cry(){
System.out.println(name + "......喵喵喵");
}

如果我們使用傳統方法,要調用這個方法,是不是就要修改代碼了,比如cat.cry();這樣的,那通過反射,我們只需要修改配置文件就可以了,在配置文件re.properties中,將method=hi改為method=cry,就可以了。

運行,發現成功調用并輸出了內容,實現了改配置文件,不改代碼,完成了解藕。

反射機制

上文中,通過一個小案例來簡單的了解了一下反射,現在來系統的說一下。**反射機制允許程序在執行期借助于ReflectionAPI取得任何類的內部信息(比如成員變量、構造器、成員方法等等),并能操作對象的屬性及方法。**加載完類后,在堆中就產生了一個Class類型的對象(一個類只有一個Class對象),這個對象包含了類的完整結構信息。通過這個對象得到類的結構。為了便于理解,在這里為大家畫一下Java反射機制原理示意圖。如下:

然后現在做一個小小的總結,Java反射機制可以完成:

  • 在運行時判斷任意一個對象所屬的類。
  • 在運行時構造任意一個類的對象。
  • 在運行時得到任意一個類所具有的成員變量和方法。
  • 在運行時調用任意一個對象的成員變量和方法。
  • 生成動態代理。

反射相關的主要類如下:

  • Java.long.Class:代表一個類,Class對象表示某個類加載后在堆中的對象。
  • Java.lang.reflect.Method:代表類的方法。
  • Java.lang.reflect.Field:代表類的成員變量
  • Java.lang.reflect.Constructor:代表類的構造方法

上文的案例代碼中,我們使用了Method和Class相關的方法,現在演示一下,通過Field來拿到成員變量,代碼如下:

Field name = cls.getField("name");
System.out.println(name.get(o));

發現成功拿到了成員變量的值:

Class類分析

接下來對Class類特點進行一下梳理。先看看Class類圖:

我們發現它的父類仍然是Object。

然后第二點是,Class類對象不是new出來的,而是系統創建的。這里怎么理解呢,還記得上面咱們畫的原理圖嗎?Class類是由loadClass()方法完成類加載,生成了某個類對應的Class類對象?,F在為大家演示一下。寫如下案例代碼:

Class<?> aClass = Class.forName("com.lxflxf.Cat");

然后這這句代碼的前面下一個斷點,進行調試。成功進入ClassLoader類中,到了loadClass()方法。如下:

接下來說第三點,對于某個類的Class類對象,在內存中只有一份,因為類只加載一次。現在寫一個小案例來驗證一下這個事情,通過ha shCode來判斷,寫如下幾行代碼:

Class<?> cls1 = Class.forName("com.lxflxf.Cat");
Class<?> cls2 = Class.forName("com.lxflxf.Cat");
System.out.println(cls1.hashCode());
System.out.println(cls2.hashCode());

執行結果如下圖,值相同。

最后關于Class類對象還有兩點說一下,一是每個類的實例都會記得自己是由哪個Class實例所生成,二是Class對象可以完整地得到一個類的完整結構,通過一系列的API。

Class類常用方法

這里通過寫小案例的方式,為大家說說Class類常用方法,首先新建一個Car類,代碼如下:

public class Car {
public String brand;
public int price;
public String color;
}

然后我要獲取到Car類對應的Class對象,這里用到的就是forName()方法:

String classAllPath = "com.lxflxf.Car";
//獲取到Car類對應的Class對象
Class cls = Class.forName(classAllPath);

我們可以輸出一下:

System.out.println(cls);
System.out.println(cls.getClass());

第一個輸出的是cls對象,是哪個類的Class對象,第二個輸出的是cls運行類型,如下圖:

如果我想要得到包名,可以通過getPackageName()方法,可以通過System.out.println(cls.getPackageName()),輸出內容為com.lxflxf。如果想得到類名,可以通過getName()方法。還有一個很重要的方法,那就是創建對象實例:newInstance(),案例如:Object o = cls.newInstance();,這里也需要注意一點,在JDK1.9往上,不再使用newInstance()。還可以通過getField()獲取到屬性。還有一寫其他方法,這里就不一一舉例了。列了一個表格,如下:

前面說了這么多,那哪些類型有Class對象呢?如下列表:

外部類,成員內部類,靜態內部類,局部內部類,匿名內部類

interface:接口

數組

enum: 枚舉

annotation: 注解

基本數據類型

void

案例代碼如下:

Class<String> cls1 = String.class;  //外部類
Class<Serializable> cls2 = Serializable.class; //接口
Class<Integer[]> cls3 = Integer[].class; //數組
Class<Deprecated> cls4 = Deprecated.class; //注解
System.out.println(cls1);
System.out.println(cls2);
System.out.println(cls3);
System.out.println(cls4);

輸出結果如下:

動態加載

在文章最開始,就說了一下,通過“反射”,我們可以將Java這種靜態語?附加上動態特性,換句話說,就是反射機制是Java實現動態語言的關鍵,也就是通過反射實現類動態加載。怎么理解呢,就是在運行時加載需要的類,如果運行時不用該類,則不報錯,降低了依賴性。

舉個例子吧!

新建一個Java文件,命名為ClassLoad,寫入如下代碼:

Scanner scanner = new Scanner(System.in);
System.out.println("請輸入數字");
String key = scanner.next();
switch (key){
case "1":
System.out.println("我等于1");
case "2":
Class<?> cls = Class.forName("Person");
Object o = cls.newInstance();
Method m = cls.getMethod("hi");
m.invoke(o);
System.out.println("ok!");
break;

}

這里,我沒有寫Person類,但是程序編譯的時候是不會報錯的。也就是說,等到程序執行到case "2",里面時才會發生報錯,也就是上文中提到的**在運行時加載需要的類,如果運行時不用該類,則不報錯,這就是動態加載。**我們現在來運行看一眼。先輸入1程序正常,然后輸入2報錯。

現在是不是理解了動態加載了呢。

類加載

可能還有一些同學想要了解,比如,類加載過程到底是怎么樣的呢?其實類加載大體分為三個階段(加載階段(Loading)、鏈接階段(驗證、準備、解析)、初始化階段(initalization)),這里畫一張圖來便于理解。

具體的這個內容咱們后續再說,現在這里就不做探討了。

責任編輯:武曉燕 來源: FreeBuf.COM
相關推薦

2020-07-03 08:21:57

Java集合框架

2023-02-10 09:04:27

2022-06-20 09:01:23

Git插件項目

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-08-01 11:33:09

用戶分析標簽策略

2023-09-11 08:13:03

分布式跟蹤工具

2021-04-08 07:37:39

隊列數據結構算法

2020-07-06 08:06:00

Java模塊系統

2019-05-14 09:31:16

架構整潔軟件編程范式

2024-09-23 08:00:00

消息隊列MQ分布式系統

2023-10-17 08:15:28

API前后端分離

2025-08-07 04:10:00

光模塊AI網絡

2018-05-22 08:24:50

PythonPyMongoMongoDB

2017-03-11 22:19:09

深度學習

2023-11-18 09:30:42

模型AI

2022-07-06 12:07:06

Python函數式編程

2022-05-19 08:28:19

索引數據庫

2023-11-06 07:21:13

內存結構Jvm

2020-10-18 07:32:06

SD-WAN網絡傳統廣域網

2019-04-01 10:43:59

Linux問題故障
點贊
收藏

51CTO技術棧公眾號

日韩欧亚中文在线| 久久综合一区二区| 亚州欧美日韩中文视频| 亚洲欧美视频在线播放| 日韩欧美2区| 一区二区三区毛片| 欧美日韩一区二区三区在线视频| 在线观看视频二区| 欧美jjzz| 中文字幕亚洲国产| 免费观看污网站| 激情亚洲小说| 精品久久久久久久久久| 中文字幕一区二区三区有限公司 | 久久久久久久久久码影片| 91麻豆精品在线| 韩国在线一区| 久久深夜福利免费观看| 黄色性生活一级片| 国产精品一区二区精品| 日本道精品一区二区三区 | 波多野结衣a v在线| 欧美9999| 欧美伦理视频网站| 久久久久久久久久久久久久国产| 午夜伦理大片视频在线观看| 欧美经典一区二区三区| 精品国产乱码久久久久软件| jlzzjlzzjlzz亚洲人| 蜜臀av在线播放一区二区三区| 91国内产香蕉| 欧洲猛交xxxx乱大交3| 日韩精品不卡一区二区| 日韩成人xxxx| 精品人妻一区二区免费| 精品欧美视频| 91麻豆精品国产自产在线观看一区| www黄色av| 川上优av中文字幕一区二区| 亚洲黄色在线视频| 亚洲乱码一区二区三区| 牛牛热在线视频| av电影在线观看完整版一区二区| 亚洲xxx视频| 国产三级自拍视频| 精品一区二区三区视频| 国产欧美日韩免费| 中日韩av在线| 日韩av网站在线观看| 欧美综合在线观看| www.毛片.com| 国产深夜精品| 欧洲亚洲免费视频| 国产成人在线视频观看| 久久av一区二区三区| 91精品国产高清久久久久久| 国产在线视频第一页| 黄色成人精品网站| 国模极品一区二区三区| 日本熟伦人妇xxxx| 亚洲欧美清纯在线制服| 欧美最近摘花xxxx摘花| 波多野结衣一区二区三区四区| 久久夜色精品| 国产精品对白刺激| 中文资源在线播放| 精品一区二区三区视频在线观看| 亚洲专区在线视频| 国产91免费在线观看| av不卡一区二区三区| 久久久久久久久一区二区| 日韩欧美亚洲系列| 国产日韩欧美电影| 中文字幕一区综合| 日本大片在线播放| 天天综合网天天综合色| www.欧美日本| 美女久久久久久| 欧美电影免费提供在线观看| 亚洲精品第二页| 尤物tv在线精品| 最近2019年日本中文免费字幕 | 亚洲午夜激情av| 国产网站免费在线观看| 四虎影视4hu4虎成人| 在线成人免费视频| 久久久久亚洲无码| 欧美精品系列| 久久国产视频网站| 久久久久久久久久久久久av| 蜜桃av噜噜一区二区三区小说| 成人情趣片在线观看免费| 亚洲第一色网站| 久久精品欧美一区二区三区麻豆| 黄色网址在线免费看| 成人影院在线视频| 欧美乱妇15p| 白嫩情侣偷拍呻吟刺激 | 国产成人精品亚洲日本在线桃色 | 992kp免费看片| 亚洲黄页网站| 欧美成人精品一区二区三区| 亚洲国产成人无码av在线| 国产中文字幕精品| 欧美另类网站| 日韩经典av| 欧美日韩一区二区三区高清| 国产精品手机在线观看| 99精品一区| 欧美在线亚洲一区| 午夜免费福利视频| 国产精品久久久久久久久图文区 | 日韩国产伦理| 波多野结衣乳巨码无在线观看| 欧美视频一区二区三区在线观看| 在线观看免费视频国产| 天天综合网网欲色| 国产成人精品在线观看| 亚洲欧美日韩免费| 亚洲一区二三区| 亚洲18在线看污www麻豆 | 性欧美精品一区二区三区在线播放 | 奇米777在线视频| 欧美日韩亚洲在线观看| 欧美激情在线一区| 国产色视频在线| 国产精品久久久久久久久免费樱桃| 国产a级一级片| 欧美毛片免费观看| 欧美精品激情blacked18| 国产强被迫伦姧在线观看无码| 国产欧美日韩精品a在线观看| 黄色成人在线看| 风间由美一区二区av101| 久久九九热免费视频| 中文亚洲av片在线观看| 91免费在线播放| 日本少妇高潮喷水视频| 国产一区福利| 98视频在线噜噜噜国产| 亚洲国产福利视频| 一区二区三区不卡在线观看| 免费在线观看污网站| 久久亚洲国产| 成人免费视频网| 成人在线直播| 欧美放荡的少妇| 少妇aaaaa| 免费在线成人网| 一区二区三区四区不卡| 香蕉久久久久久| 日韩在线高清视频| 99久久国产免费| 亚洲精品国产品国语在线app| 日本高清一区二区视频| 午夜精品毛片| 97av影视网在线观看| 免费网站在线观看人| 亚洲国产成人精品一区二区| 亚欧视频在线观看| 久久新电视剧免费观看| 自慰无码一区二区三区| 亚洲另类av| 国产精品自拍小视频| 麻豆免费在线视频| 日韩欧美自拍偷拍| 国产乡下妇女做爰视频| 久久免费美女视频| 天天爽夜夜爽一区二区三区| 亚洲激情中文在线| 高清视频在线观看一区| 国产一二在线播放| 亚洲系列中文字幕| 国产精品系列视频| 亚洲成人动漫精品| 日韩毛片无码永久免费看| 久久国产精品99久久久久久老狼 | 久久先锋影音| 波多野结衣三级在线| 白白在线精品| 青青草精品毛片| 麻豆传媒在线完整视频| 亚洲国产成人一区| 中文字幕久久熟女蜜桃| 亚洲精品一二三区| www.色多多| 精品一区二区三区免费播放| 国产va亚洲va在线va| 久久综合欧美| 亚洲一区免费网站| 中文字幕在线免费观看视频| 日韩亚洲一区二区| 性xxxx视频播放免费| 欧美日韩在线三级| 国产精品50页| 自拍偷拍欧美激情| 熟女丰满老熟女熟妇| 国内精品写真在线观看| 日日橹狠狠爱欧美超碰| 午夜精品视频| 午夜精品区一区二区三| 国产成人在线中文字幕| 国产精品久久久久久av福利| av小说在线播放| yellow中文字幕久久| 三级理论午夜在线观看| 日韩丝袜情趣美女图片| 国产精品免费无遮挡无码永久视频| 一区二区三区日韩| 五月婷婷欧美激情| 99久久99久久久精品齐齐| 国产精品探花在线播放| 日欧美一区二区| 国产 日韩 亚洲 欧美| 久久一区二区中文字幕| 青娱乐国产91| 美女午夜精品| 成人黄色av网站| 国产精品亚洲d| 2021久久精品国产99国产精品| 成视频免费观看在线看| 色偷偷亚洲男人天堂| 暖暖视频在线免费观看| 日韩av综合中文字幕| 黄色一级a毛片| 91精品国产综合久久蜜臀| 中文字幕日韩经典| 日本二三区不卡| 六月丁香婷婷综合| 亚洲国产精品人人做人人爽| 午夜剧场免费在线观看| 国产精品人成在线观看免费| 日韩一区二区a片免费观看| www.亚洲人| 日本50路肥熟bbw| 丰满放荡岳乱妇91ww| 免费黄色av网址| 高清免费成人av| 久久久久久久久久久久国产精品| 国产精品1区2区| 18深夜在线观看免费视频| 国产精品一区一区| 99999精品| 高清成人在线观看| 中文字幕视频观看| 成人福利视频在线| 亚洲精品第二页| av动漫一区二区| 亚洲做受高潮无遮挡| 91蜜桃视频在线| 亚洲久久久久久| 91免费在线播放| 日本少妇xxxxx| 国产精品丝袜久久久久久app| 91成人精品一区二区| 亚洲国产精品99久久久久久久久| 成熟人妻av无码专区| 中文字幕精品一区二区三区精品| 97在线观看免费视频| 1000部国产精品成人观看| 99鲁鲁精品一区二区三区| 亚洲免费在线视频一区 二区| 国产97免费视频| 午夜视频一区在线观看| 麻豆成人免费视频| 欧美在线一二三四区| 91亚洲视频在线观看| 6080日韩午夜伦伦午夜伦| 亚洲AV无码乱码国产精品牛牛| 精品国产成人在线影院| 亚洲日本中文字幕在线| 国产一区二区三区在线看| 麻豆影视国产在线观看| 欧美精品videosex牲欧美| 涩涩av在线| 国产精品三级久久久久久电影| 成人日韩视频| 国产亚洲精品美女久久久m| 国产一区不卡| 成年人三级视频| 91久久视频| 日本激情视频在线播放| 国产精品一区不卡| 久久精品一区二区免费播放| 国产精品国产三级国产普通话蜜臀| 欧美成人免费观看视频| 色综合视频在线观看| 97视频免费在线| 亚洲精品狠狠操| 午夜小视频在线| 91高清视频在线免费观看| 成人国产综合| 国产主播一区二区三区四区| 日韩欧美视频专区| 热99这里只有精品| 久久99国产精品免费网站| 久久精品女同亚洲女同13| 中文字幕免费不卡| 国产无遮挡又黄又爽| 欧美群妇大交群的观看方式| 人妻无码中文字幕免费视频蜜桃| 中文字幕亚洲第一| 在线天堂资源www在线污| 亚洲自拍偷拍一区| 国产精品亚洲二区| 黄色国产一级视频| 国产麻豆精品95视频| 国产sm调教视频| 黄色成人av在线| 精品区在线观看| 日韩在线国产精品| 都市激情综合| 国产一区免费视频| 伊人久久大香线| 日本 片 成人 在线| 久久夜色精品国产噜噜av| 久久久久久久国产视频| 欧美日韩黄色一区二区| 久草福利在线| 亚洲 日韩 国产第一| 日韩精品一区二区三区中文在线| 亚洲va韩国va欧美va精四季| 午夜一级久久| 国产真实乱人偷精品| 亚洲卡通欧美制服中文| 亚洲图片视频小说| 国产亚洲精品激情久久| 亚洲福利影院| 久久99九九| 亚洲另类视频| 香港三日本8a三级少妇三级99| 一区二区三区中文字幕| 国产强伦人妻毛片| 久久综合久久美利坚合众国| 久久91视频| 亚洲最大免费| 久久精品国产久精国产爱| youjizz亚洲女人| 91豆麻精品91久久久久久| 免费a级毛片在线观看| 日韩免费观看视频| 窝窝社区一区二区| 国产91xxx| 91香蕉国产在线观看软件| 国产无套在线观看| 亚洲变态欧美另类捆绑| 国产乱码在线| 精品乱色一区二区中文字幕| 亚洲网站视频| 久久久久亚洲av成人网人人软件| 亚洲激情网站免费观看| 成人午夜免费福利| 97在线观看免费| 台湾色综合娱乐中文网| 国产日韩一区二区在线观看| 久久精品亚洲一区二区三区浴池| 亚洲毛片一区二区三区| 永久555www成人免费| 精品久久福利| 精品视频在线观看一区二区| 不卡视频在线看| 无码人妻精品一区二区三区9厂| 伊人伊成久久人综合网小说| 日本久久久久| 99久久久精品视频| 26uuu久久综合| 欧美另类高清videos的特点| 波霸ol色综合久久| 96sao在线精品免费视频| 99爱视频在线| 欧美国产日韩亚洲一区| 国产精品人人爽| 国内精品久久久久久久| 国产伦精品一区二区三区千人斩| www.超碰com| 亚洲免费伊人电影| 性高潮久久久久久久久久| 国产精品毛片a∨一区二区三区|国| 国产精品传媒精东影业在线| 日本一区二区在线观看视频| 激情成人在线视频| av片在线免费观看| 国产精品日韩欧美一区二区三区| 久久成人国产| 日韩一级片大全| 亚洲精品第一页| 日韩亚洲国产免费| 国产精品无码av在线播放| 国产精品美女久久久久久久久 | 成人av在线不卡| 久久久91精品国产一区二区三区| 999国产精品视频免费| 欧美亚洲日本网站| 亚洲破处大片| 巨胸大乳www视频免费观看| 日韩精品在线一区二区| av激情成人网| 国产精品裸体瑜伽视频| 综合久久综合久久| 免费播放片a高清在线观看|