①反射中,class.forname和classloader的區別。
class.forname()和classloader都是對類進行載入。classloader呼叫啟動類的類載入器,通過乙個類的全限定名來獲取描述此類的二進位制位元組流,然後將這個二進位制流放到jvm中。兩者的主要區別在於,class.forname()在將.class檔案載入到jvm以外,還會對類進行初始化載入,如果存在static靜態**塊,就回去執行,相對的classloader只會將內容載入到jvm,並不會去載入執行static的內容。只有在newinstance下才會執行。
那麼在這種情況下,我們是否可以控制class.forname()對class檔案的載入?答案是肯定的。我們可以通過對class.forname()的引數設定使其不會初始化,class.forname(string name, boolean initialize,classloader loader)
三個引數中,initialize引數為true時(預設)才會初始化,所以我們是可以手動控制class.forname()載入到jvm後是否初始化的。
總結:簡而言之,class.forname載入類是將類進了初始化,而classloader的loadclass並沒有對類進行初始化,只是把類載入到了虛擬機器中。實際上ioc的實現就是使用的classloader,而jdbc通常是使用class.forname()方法來載入資料庫連線驅動(資料庫驅動類必須向drivermanager註冊自己)。
②new物件和newinstance的區別。
1、newinstance建立類使用類載入機制,前提是這個類必須已經載入過且已經連線完成,而new建立類則直接建立乙個新類。
2、newinstance: 弱型別
new :強型別
備註:弱型別:gc是**物件的限制條件很低,容易被**、低效率、 只能呼叫無參構造。
強型別:gc不會自動**,只有所有的指向物件的引用被移除是才會被**,若物件生命週期已經結束,但引用沒有被移除,經常會出現記憶體溢位
總結:newinstance: 弱型別。低效率。只能呼叫無參構造。
new: 強型別。相對高效。能呼叫任何public構造。
寄語:大鵬一日同風起,扶搖直上九萬里。
作者筆錄:諸君既有登天攬月之志,即無高踏之台給吾上乎?然今高踏之台,如池塘戲魚蝦之流,食飢之道,非吾之願也。吾之志,上可登臨望月辰,下可臨淵觀蛟龍,月辰不可觸,亦上而撫之,蛟龍不可戲,亦下而降之。諸君年少乎?若年少,不可貪於池塘斤斤肥魚而步不離,望北冥浩瀚而卻步。守而魚之,終有盡時,不若動而漁之,無窮盡矣。非乎?亦持老驥伏櫪之心,漢昇壯哉之志。吾之志,有其心而動,諸君共勉。
頁面載入JS兩種方式
第一種 window.onload function 第二種 document ready function 或簡寫 function 區別 1.執行時間 window.onload必須等到頁面內包括的所有元素載入完畢後才能執行。document ready 是dom結構繪製完畢後就執行,不必等到載...
linux linux驅動載入的兩種方式
動態載入 在系統啟動後,通過insmod或modprobe命令載入.ko核心目標檔案,成功後可通過mknod指令進行掛載節點,不需要的時候可通過rmmod命令來解除安裝模組。優點 1 生成的核心檔案小 2 系統啟動時間短。3 使用靈活。缺點 每次使用都需要通過命令進行載入與解除安裝,操作麻煩。靜態載...
載入xib檔案的兩種方式
一 載入xib檔案的兩種方式 1.方法一 newscell是xib檔案的名稱 nsarray objects nsbundle mainbundle loadnibnamed newscell owner nil options nil 2.方法二 uinib nib uinib nibwithni...