自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

java動(dòng)態(tài)載入使用中的兩種方式

開發(fā) 后端
java動(dòng)態(tài)載入的時(shí)候需要我們注意很多問題,其實(shí)我們不斷的使用中才能更好的進(jìn)行開發(fā)和完善。希望大家有所幫助。

java動(dòng)態(tài)載入的時(shí)候需要考慮到安全因素,這個(gè)問題就是我們必須解決的問題。下面我們就看看如何才能更好的解決相關(guān)安全上面的問題。希望大家從中吸取相關(guān)的知識(shí)。

我們試想一下,如果不使用這種委托模式,那我們就可以隨時(shí)使用自定義的String來動(dòng)態(tài)替代java核心api中定義類型,這樣會(huì)存在非常大的安全隱患,而雙親委托的方式,就可以避免這種情況,因?yàn)镾tring已經(jīng)在啟動(dòng)時(shí)被加載,所以用戶自定義類是無法加載一個(gè)自定義的ClassLoader。

java動(dòng)態(tài)載入class的兩種方式:

implicit隱式,即利用實(shí)例化才載入的特性來java動(dòng)態(tài)載入入class

explicit顯式方式,又分兩種方式:

java.lang.Class的forName()方法

java.lang.ClassLoader的loadClass()方法

用Class.forName加載類

Class.forName使用的是被調(diào)用者的類加載器來加載類的。

這種特性, 證明了java類加載器中的名稱空間是***的, 不會(huì)相互干擾。

即在一般情況下, 保證同一個(gè)類中所關(guān)聯(lián)的其他類都是由當(dāng)前類的類加載器所加載的。

 

  1. public static Class forName(String className)  
  2. throws ClassNotFoundException {  
  3. return forName0(className, true , ClassLoader.getCallerClassLoader());  
  4. }  
  5. /** Called after security checks have been made. */  
  6. private static native Class forName0(String name, boolean initialize,  
  7. ClassLoader loader)  
  8. throws ClassNotFoundException; 

 

Java代碼

 

  1. public static Class forName(String className)  
  2. throws ClassNotFoundException {  
  3. return forName0(className, true , ClassLoader.getCallerClassLoader());  
  4. }  
  5. /** Called after security checks have been made. */  
  6. private static native Class forName0(String name, boolean initialize,  
  7. ClassLoader loader)  
  8. throws ClassNotFoundException; 

 

上面中 ClassLoader.getCallerClassLoader 就是得到調(diào)用當(dāng)前forName方法的類的類加載器

static塊在什么時(shí)候執(zhí)行?

當(dāng)調(diào)用forName(String)載入class時(shí)執(zhí)行,如果調(diào)用ClassLoader.loadClass并不會(huì)執(zhí)行.forName(String,false,ClassLoader)時(shí)也不會(huì)執(zhí)行,如果載入Class時(shí)沒有執(zhí)行static塊則在***次實(shí)例化時(shí)執(zhí)行.比如new ,Class.newInstance()操作static塊僅執(zhí)行一次,各個(gè)java類由哪些classLoader加載?#t#

java類可以通過實(shí)例.getClass.getClassLoader()得知

接口由AppClassLoader(System ClassLoader,可以由ClassLoader.getSystemClassLoader()獲得實(shí)例)載入

ClassLoader類由bootstrap loader載入

NoClassDefFoundError和ClassNotFoundException

NoClassDefFoundError:當(dāng)java源文件已編譯成.class文件,但是ClassLoader在運(yùn)行期間在其搜尋路徑load某個(gè)類時(shí),沒有找到.class文件則報(bào)這個(gè)錯(cuò)

ClassNotFoundException:試圖通過一個(gè)String變量來創(chuàng)建一個(gè)Class類時(shí)不成功則拋出這個(gè)異常,以上就是對(duì)java動(dòng)態(tài)載入的詳細(xì)介紹。

責(zé)任編輯:張浩 來源: 博客園
相關(guān)推薦

2011-06-16 10:02:08

JAVA靜態(tài)載入

2024-02-04 09:24:45

MyBatisSQL語句Spring

2010-07-15 14:38:55

Perl eval函數(shù)

2022-03-24 23:04:37

linux靜態(tài)庫動(dòng)態(tài)庫

2011-04-02 09:48:38

深拷貝

2011-03-03 10:26:04

Pureftpd

2021-05-27 10:57:01

TCP定時(shí)器網(wǎng)絡(luò)協(xié)議

2010-11-12 11:48:15

2010-08-06 09:38:11

Flex讀取XML

2023-03-29 13:06:36

2009-06-25 13:43:00

Buffalo AJA

2010-10-21 16:24:18

sql server升

2012-12-24 13:30:34

iOS

2010-09-07 11:09:59

2010-11-24 08:54:33

2016-11-07 09:02:02

Malloc內(nèi)存syscall

2009-09-08 15:22:20

Spring依賴注入

2010-08-03 13:27:04

FlexBuilder

2010-10-20 15:48:56

SQL Server許

2021-12-08 10:47:35

RabbitMQ 實(shí)現(xiàn)延遲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)