大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java基礎(chǔ)內(nèi)容之一Java反射技術(shù)

Java基礎(chǔ)內(nèi)容之一Java反射技術(shù)

更新時間:2020-07-30 14:46:00 來源:動力節(jié)點 瀏覽2155次

什么是反射?它的應(yīng)用場景是什么?

反射(Reflection)是Java程序開發(fā)語言的特征之一,它允許運行中的Java程序獲取自身的信息,并且可以操作類或?qū)ο蟮膬?nèi)部屬性。

重點:是運行時而不是編譯時

“反射”既然有“反”那么肯定有“正”,那么我們首先看一下正的一面

Java基礎(chǔ)內(nèi)容之一Java反射技術(shù)

假如你寫了一段代碼:Object o=new Object();

運行了起來!

首先JVM會啟動,你的代碼會編譯成一個.class文件,然后被類加載器加載進jvm的內(nèi)存中,你的類Object加載到方法區(qū)中,創(chuàng)建了Object類的class對象到堆中,注意這個不是new出來的對象,而是類的類型對象,每個類只有一個class對象,作為方法區(qū)類的數(shù)據(jù)結(jié)構(gòu)的接口。jvm創(chuàng)建對象前,會先檢查類是否加載,尋找類對應(yīng)的class對象,若加載好,則為你的對象分配內(nèi)存,初始化也就是代碼:new Object()。

上面的流程就是你自己寫好的代碼扔給jvm去跑,跑完就over了,jvm關(guān)閉,你的程序也停止了。

上面的程序?qū)ο笫亲约簄ew的,程序相當(dāng)于寫死了給jvm去跑。假如一個服務(wù)器上突然遇到某個請求哦要用到某個類,哎呀但沒加載進jvm,是不是要停下來自己寫段代碼,new一下,哦啟動一下服務(wù)器!

反射是什么呢?

當(dāng)我們的程序在運行時,需要動態(tài)的加載一些類這些類可能之前用不到所以不用加載到j(luò)vm,而是在運行時根據(jù)需要才加載,這樣的好處對于服務(wù)器來說不言而喻,舉個例子我們的項目底層有時是用mysql,有時用oracle,需要動態(tài)地根據(jù)實際情況加載驅(qū)動類,這個時候反射就有用了,假設(shè)com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection這兩個類我們要用,這時候我們的程序就寫得比較動態(tài)化,通過Class tc=Class.forName("com.java.dbtest.TestConnection");通過類的全類名讓jvm在服務(wù)器中找到并加載這個類,而如果是oracle則傳入的參數(shù)就變成另一個了。這時候就可以看到反射的好處了,這個動態(tài)性就體現(xiàn)出java的特性了!

在spring框架中,會發(fā)現(xiàn)當(dāng)你配置各種各樣的bean時,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就會根據(jù)你的需求去動態(tài)加載,你的程序就能健壯地運行。

對與框架開發(fā)人員來說,反射雖小但作用非常大,它是各種容器實現(xiàn)的核心。而對于一般的開發(fā)者來說,不深入框架開發(fā)則用反射用的就會少一點,不過了解一下框架的底層機制有助于豐富自己的編程思想,也是很有益的。

知識剖析:

java反射機制提供了以下幾個功能:

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

在運行時構(gòu)造任意一個類的對象;

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

在運行時調(diào)用任意一個對象的方法。

反射涉及到四個核心類:

java.lang.Class.java:類對象;

java.lang.reflect.Constructor.java:類的構(gòu)造器對象;

java.lang.reflect.Method.java:類的方法對象;

java.lang.reflect.Field.java:類的屬性對象;

反射工作原理

反射的工作原理就是借助Class.java、Constructor.java、Method.java、Field.java這四個類在程序運行時動態(tài)訪問和修改任何類的行為和狀態(tài)。

代碼實現(xiàn):

常見問題:

反射的特點

優(yōu)點

靈活、自由度高:不受類的訪問權(quán)限限制,想對類做啥就做啥;

缺點

性能問題:通過反射訪問、修改類的屬性和方法時會遠(yuǎn)慢于直接操作,但性能問題的嚴(yán)重程度取決于在程序中是如何使用反射的。如果使用得很少,不是很頻繁,性能將不會是什么問題;

安全性問題:反射可以隨意訪問和修改類的所有狀態(tài)和行為,破壞了類的封裝性,如果不熟悉被反射類的實現(xiàn)原理,隨意修改可能導(dǎo)致潛在的邏輯問題;

兼容性問題:因為反射會涉及到直接訪問類的方法名和實例名,不同版本的API如果有變動,反射時找不到對應(yīng)的屬性和方法時會報異常;

如何避免反射導(dǎo)致的性能問題?

過多地使用反射,的確會存在性能問題,但如果使用得當(dāng),所謂反射導(dǎo)致性能問題也就不是問題了,關(guān)于反射對性能的影響,參照下面的使用原則,并不會有什么明顯的問題:

不要過于頻繁地使用反射,大量地使用反射會帶來性能問題;

通過反射直接訪問實例會比訪問方法快很多,所以應(yīng)該優(yōu)先采用訪問實例的方式。

Java基礎(chǔ)內(nèi)容之一Java反射技術(shù)

Java反射方法:http://www.dabaquan.cn/tutorial_java_advance/677.html

Java反射概述:http://www.dabaquan.cn/tutorial_java_advance/674.html

以上就是動力節(jié)點java培訓(xùn)機構(gòu)的小編針對“Java基礎(chǔ)內(nèi)容之一Java反射技術(shù)”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧美成人看片一区二区三区 | 国产伦精品一区二区三区四区 | 国产精品久久久久久久久久一区 | 50-60岁老妇女一级毛片 | 国产成人短视频 | 在线观看视频亚洲 | 不卡一二区 | 久久久久久97 | 97影院理论片在线观看 | 亚洲一区二区三区免费 | 九九九九热精品视频 | 免费看欧美一级特黄a大片一 | 色在线视频观看 | 四虎视频国产精品免费入口 | 国产福利视频精品 | 成年女人视频免费观看一 | 久久在线视频免费观看 | 黄色影院免费看 | 亚洲欧洲日产国码二区首页 | 国产精品18久久久久久小说 | 美女撒尿毛片免费看 | 亚洲欧美日韩高清在线看 | 久久天天躁夜夜躁狠狠躁2020 | 韩国色三级伦不卡高清在线观看 | 欧美在线日韩 | 狠狠色噜噜狠狠狠狠色综合久 | 天天射天天干天天操 | 婷婷激情在线 | 成人在线免费小视频 | 日产精品一区二区 | 综合视频在线 | 国产国拍亚洲精品福利 | 久草热视频在线 | 日本b站一卡二不卡 | 五月婷婷婷婷 | 亚洲精品久久久久综合中文字幕 | 国产69精品久久久久99尤物 | 成年人黄视频大全 | 欧美拍拍视频 | 国产精品a人片在线观看 | 日韩小视频在线播放 |