本篇內(nèi)容主要講解“JavaSE反射面試題有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaSE反射面試題有哪些”吧!
創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的10年時間我們累計服務了上千家以及全國政企客戶,如門窗定制等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質(zhì)量監(jiān)控加上過硬的技術實力獲得客戶的一致表揚。說說你對 Java 中反射的理解
在運行狀態(tài),對于任意一個類,都能獲取這個類的所有屬性和方法,對任意一個對象,都能調(diào)用它的任意屬性和方法。這種動態(tài)獲取的信息及動態(tài)調(diào)用對象的方法即為Java的反射。
反射能做什么
在運行時判斷一個類所具有的成員變量和方法在運行時判斷任意一個對象所屬的類在運行時構造一個類的對象在運行時調(diào)用任意一個對象的方法
class.forName和classLoader的區(qū)別
class.forName:
將類的.class文件加載到jvm中
對類進行解釋,執(zhí)行類中的static塊
classLoader:
只干一件事情:將.class文件加載到jvm中,不會執(zhí)行static中的內(nèi)容,只有在newInstance才會去執(zhí)行static塊。
Class.forName(className):內(nèi)部調(diào)用的方法是 Class.forName(className,true,classloader);第2個boolean參數(shù)表示類是否需要初始化, Class.forName(className)默認是需要初始化。一旦初始化,就會觸發(fā)目標對象的static塊代碼執(zhí)行,static參數(shù)也也會被再次初始化。
ClassLoader.loadClass(className):內(nèi)部調(diào)用的方法是ClassLoader.loadClass(className,false);第2個 boolean參數(shù),表示目標對象是否進行鏈接,false表示不進行鏈接,不進行鏈接意味著不進行包括初始化等一些列步驟,那么靜態(tài)塊和靜態(tài)對象就不會得到執(zhí)行
動靜態(tài)代理的區(qū)別,什么場景使用?
靜態(tài)代理通常只代理一個類,動態(tài)代理是代理一個接口下的多個實現(xiàn)類。
靜態(tài)代理事先知道要代理的是什么,而動態(tài)代理不知道要代理什么東西,只有在運行時才知道。
動態(tài)代理是實現(xiàn) JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是你的業(yè)務類必須要實現(xiàn)接口,通過 Proxy 里的 newProxyInstance 得到代理對象。還有一種動態(tài)代理 CGLIB,代理的是類,不需要業(yè)務類繼承接口,通過派生的子類來實現(xiàn)代理。通過在運行時,動態(tài)修改字節(jié)碼達到修改類的目的。
AOP 編程就是基于動態(tài)代理實現(xiàn)的,比如著名的 Spring 框架、Hibernate 框架等等都是動態(tài)代理的使用例子。
Java 的類加載器的種類都有哪些?
1、根類加載器(Bootstrap) --C++寫的 ,看不到源碼
2、擴展類加載器(Extension) --加載位置 :jre\lib\ext 中
3、系統(tǒng)(應用)類加載器(System\App) --加載位置 :classpath 中
4、自定義加載器(必須繼承 ClassLoader)
類什么時候被初始化?
創(chuàng)建類的實例,也就是 new 一個對象
訪問某個類或接口的靜態(tài)變量,或者對該靜態(tài)變量賦值
調(diào)用類的靜態(tài)方法
反射(Class.forName("com.hcx.load"))
初始化一個類的子類(會首先初始化子類的父類)
JVM 啟動時標明的啟動類,即文件名和類名相同的那個類
類的初始化步驟:
如果這個類還沒有被加載和鏈接,那先進行加載和鏈接
假如這個類存在直接父類,并且這個類還沒有被初始化(注意:在一個類加載器中,類只能初始化一次),那就初始化直接的父類(不適用于接口)
加入類中存在初始化語句(如 static 變量和 static塊),那就依次執(zhí)行這些初始化語句。
獲得一個類對象有哪些方式?
類型.class,例如:String.class
對象.getClass(),例如:"hello".getClass()
Class.forName(),例如:Class.forName("java.lang.String")
到此,相信大家對“JavaSE反射面試題有哪些”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
網(wǎng)站標題:JavaSE反射面試題有哪些-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://vcdvsql.cn/article4/eghoe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、用戶體驗、網(wǎng)站改版、網(wǎng)站設計、網(wǎng)站制作、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容