JavaSE反射面試題有哪些-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“JavaSE反射面試題有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“JavaSE反射面試題有哪些”吧!

創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來(lái)公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過(guò)去的10年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如門(mén)窗定制等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過(guò)硬的技術(shù)實(shí)力獲得客戶的一致表?yè)P(yáng)。

說(shuō)說(shuō)你對(duì) Java 中反射的理解

在運(yùn)行狀態(tài),對(duì)于任意一個(gè)類(lèi),都能獲取這個(gè)類(lèi)的所有屬性和方法,對(duì)任意一個(gè)對(duì)象,都能調(diào)用它的任意屬性和方法。這種動(dòng)態(tài)獲取的信息及動(dòng)態(tài)調(diào)用對(duì)象的方法即為Java的反射。

反射能做什么

在運(yùn)行時(shí)判斷一個(gè)類(lèi)所具有的成員變量和方法在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類(lèi)在運(yùn)行時(shí)構(gòu)造一個(gè)類(lèi)的對(duì)象在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法

class.forName和classLoader的區(qū)別

class.forName:

  • 將類(lèi)的.class文件加載到j(luò)vm中

  • 對(duì)類(lèi)進(jìn)行解釋?zhuān)瑘?zhí)行類(lèi)中的static塊

classLoader:

  • 只干一件事情:將.class文件加載到j(luò)vm中,不會(huì)執(zhí)行static中的內(nèi)容,只有在newInstance才會(huì)去執(zhí)行static塊。

Class.forName(className):內(nèi)部調(diào)用的方法是 Class.forName(className,true,classloader);第2個(gè)boolean參數(shù)表示類(lèi)是否需要初始化, Class.forName(className)默認(rèn)是需要初始化。一旦初始化,就會(huì)觸發(fā)目標(biāo)對(duì)象的static塊代碼執(zhí)行,static參數(shù)也也會(huì)被再次初始化。

ClassLoader.loadClass(className):內(nèi)部調(diào)用的方法是ClassLoader.loadClass(className,false);第2個(gè) boolean參數(shù),表示目標(biāo)對(duì)象是否進(jìn)行鏈接,false表示不進(jìn)行鏈接,不進(jìn)行鏈接意味著不進(jìn)行包括初始化等一些列步驟,那么靜態(tài)塊和靜態(tài)對(duì)象就不會(huì)得到執(zhí)行

動(dòng)靜態(tài)代理的區(qū)別,什么場(chǎng)景使用?

靜態(tài)代理通常只代理一個(gè)類(lèi),動(dòng)態(tài)代理是代理一個(gè)接口下的多個(gè)實(shí)現(xiàn)類(lèi)。

靜態(tài)代理事先知道要代理的是什么,而動(dòng)態(tài)代理不知道要代理什么東西,只有在運(yùn)行時(shí)才知道。

動(dòng)態(tài)代理是實(shí)現(xiàn) JDK 里的 InvocationHandler 接口的 invoke 方法,但注意的是代理的是接口,也就是你的業(yè)務(wù)類(lèi)必須要實(shí)現(xiàn)接口,通過(guò) Proxy 里的 newProxyInstance 得到代理對(duì)象。還有一種動(dòng)態(tài)代理 CGLIB,代理的是類(lèi),不需要業(yè)務(wù)類(lèi)繼承接口,通過(guò)派生的子類(lèi)來(lái)實(shí)現(xiàn)代理。通過(guò)在運(yùn)行時(shí),動(dòng)態(tài)修改字節(jié)碼達(dá)到修改類(lèi)的目的。

AOP 編程就是基于動(dòng)態(tài)代理實(shí)現(xiàn)的,比如著名的 Spring 框架、Hibernate 框架等等都是動(dòng)態(tài)代理的使用例子。

Java 的類(lèi)加載器的種類(lèi)都有哪些?

1、根類(lèi)加載器(Bootstrap) --C++寫(xiě)的 ,看不到源碼

2、擴(kuò)展類(lèi)加載器(Extension) --加載位置 :jre\lib\ext 中

3、系統(tǒng)(應(yīng)用)類(lèi)加載器(System\App) --加載位置 :classpath 中

4、自定義加載器(必須繼承 ClassLoader)

類(lèi)什么時(shí)候被初始化?

  • 創(chuàng)建類(lèi)的實(shí)例,也就是 new 一個(gè)對(duì)象

  • 訪問(wèn)某個(gè)類(lèi)或接口的靜態(tài)變量,或者對(duì)該靜態(tài)變量賦值

  • 調(diào)用類(lèi)的靜態(tài)方法

  • 反射(Class.forName("com.hcx.load"))

  • 初始化一個(gè)類(lèi)的子類(lèi)(會(huì)首先初始化子類(lèi)的父類(lèi))

  • JVM 啟動(dòng)時(shí)標(biāo)明的啟動(dòng)類(lèi),即文件名和類(lèi)名相同的那個(gè)類(lèi)

類(lèi)的初始化步驟:

  • 如果這個(gè)類(lèi)還沒(méi)有被加載和鏈接,那先進(jìn)行加載和鏈接

  • 假如這個(gè)類(lèi)存在直接父類(lèi),并且這個(gè)類(lèi)還沒(méi)有被初始化(注意:在一個(gè)類(lèi)加載器中,類(lèi)只能初始化一次),那就初始化直接的父類(lèi)(不適用于接口)

  • 加入類(lèi)中存在初始化語(yǔ)句(如 static 變量和 static塊),那就依次執(zhí)行這些初始化語(yǔ)句。

獲得一個(gè)類(lèi)對(duì)象有哪些方式?

  • 類(lèi)型.class,例如:String.class

  • 對(duì)象.getClass(),例如:"hello".getClass()

  • Class.forName(),例如:Class.forName("java.lang.String")

到此,相信大家對(duì)“JavaSE反射面試題有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站標(biāo)題:JavaSE反射面試題有哪些-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/article4/eghoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司用戶體驗(yàn)、網(wǎng)站改版網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)