一:反射
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中枪眉,對于任意一個(gè)類捺檬,都能夠知道這個(gè)類的所有屬性和方法;對于任意一個(gè)對象贸铜,都能夠調(diào)用它的任意一個(gè)方法和屬性堡纬;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。
二:類的加載
第一步.加載:值得是Class.forName("全限定名")蒿秦,加載字節(jié)碼文件
第二步:鏈接又分為驗(yàn)證烤镐,準(zhǔn)備,解析
驗(yàn)證:指的是檢驗(yàn)字節(jié)碼的合法性
準(zhǔn)備:指給靜態(tài)變量分配內(nèi)存空間棍鳖,并且賦初始默認(rèn)值
解析:指的是將符號引用轉(zhuǎn)換為直接引用
第三步:初始化:指靜態(tài)變量賦值和執(zhí)行類中的初始化(static)語句
??初始化的時(shí)機(jī)有6種情況:
???? 第一:創(chuàng)建類的實(shí)例(有4種方式)
???? 第二:訪問靜態(tài)變量或者給靜態(tài)變量賦值
????第三:調(diào)用類靜態(tài)方法
????第四:調(diào)用Class.forName("包類名")如加載數(shù)據(jù)庫驅(qū)動
???? 第五:完成子類的初始化也會完成本類初始化
???? 第六:該類是程序的引導(dǎo)入口,比如main入口或test入口
三炮叶,jvm的五大區(qū)域
1、程序計(jì)數(shù)器:程序計(jì)數(shù)器是一塊很小的內(nèi)存空間渡处,它是線程私有的悴灵,可以認(rèn)作為當(dāng)前線程的行號指示器就說線程執(zhí)行的位置記錄。
2骂蓖、棧(虛擬機(jī)棧):線程的獨(dú)占空間,線程每次調(diào)用方法執(zhí)行都會放入這里面积瞒,平時(shí)說的棧一般指局部變量表部分。
3登下、本地方法區(qū):本地方法棧則為虛擬機(jī)使用到的native方法服務(wù)茫孔,可能底層調(diào)用的c或者c++,我們打開jdk安裝目錄可以看到也有很多用c編寫的文件,可能就是native方法所調(diào)用的c代碼
4被芳、方法區(qū):方法區(qū)用于存儲已被虛擬機(jī)加載的類信息缰贝、常量、靜態(tài)變量畔濒,如static修飾的變量加載類的時(shí)候就被加載到方法區(qū)中
5剩晴、堆:存放new出來的對象信息, 全局變量