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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java培訓 Java培訓教程:Java反射教程實例講解

Java培訓教程:Java反射教程實例講解

更新時間:2019-12-31 09:49:07 來源:動力節點 瀏覽1977次


  什么是反射?它的應用場景是什么?


  反射(Reflection)是Java 程序開發語言的特征之一,它允許運行中的 Java 程序獲取自身的信息,并且可以操作類或對象的內部屬性。

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


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


Java培訓教程:Java反射教程實例講解


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


  運行了起來!


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


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


  上面的程序對象是自己new的,程序相當于寫死了給jvm去跑。假如一個服務器上突然遇到某個請求哦要用到某個類,哎呀但沒加載進jvm,是不是要停下來自己寫段代碼,new一下,哦啟動一下服務器,(腦殘)!


  反射是什么呢?


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


  在spring框架中,會發現當你配置各種各樣的bean時,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就會根據你的需求去動態加載,你的程序就能健壯地運行。


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


  知識剖析:


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


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


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


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


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


  反射涉及到四個核心類:


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


  java.lang.reflect.Constructor.java:類的構造器對象;


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


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


  反射工作原理


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


  代碼實現:


  常見問題:


  反射的特點


  優點


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


  缺點


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


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


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


  如何避免反射導致的性能問題?


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


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


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


Java培訓教程:Java反射教程實例講解


       以上就是動力節點Java培訓機構小編介紹的“Java培訓教程:Java反射教程實例講解”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


  相關內容


  java核心技術基礎知識


  Java內部類及反射類面試題


  Java培訓教程:Java反射機制教程


  Java反射機制的用途和缺點


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日本爱爱免费视频 | 国产精品免费一区二区三区 | 免费一级成人毛片 | 亚洲精品午夜久久久伊人 | 欧美一级日本一级韩国一级 | 欧美日韩国产精品va | 久久国产精品久久精 | 四虎永久在线精品国产 | 久久国内| 奇米影视狠狠久久中文 | 青草免费视频 | 青青操精品 | 成人性色生活影片 | 中文字幕第5页 | 在线看片91 | 亚洲国产高清视频 | 日韩欧美国产偷亚洲清高 | 中文国产成人精品久久一 | 久久99亚洲精品久久99 | 欧美性精品不卡在线观看 | 可以免费观看的一级毛片 | 国产精品夜色视频一级区 | 美女视频久久 | 欧美精品亚洲人成在线观看 | 九九久久精品 | 草草免费观看视频在线 | 91欧美| 欧洲午夜视频 | 九九热精品免费观看 | 99久久国产综合精品五月天 | 色婷婷.com| 中国性猛交xxxxx免费看 | 国产亚洲玖玖玖在线观看 | 国产一区亚洲二区三区 | 黄色毛片大全 | 2021国产精品系列一区二区 | 在线观看免费黄色小视频 | 国产精品视频在线免费观看 | 国产美女久久久亚洲 | 欧美午夜网站 | 操野逼|