? ? ? 類的生命周期:? ? ? ? ?1.加載蜓陌,查找并加載類的二進(jìn)制數(shù)據(jù),在Java堆中也創(chuàng)建一個(gè)java.lang.Class類的對(duì)象 ?? ???? 2.連接,連接又包含三塊內(nèi)容:驗(yàn)證匾七、準(zhǔn)備、初始化江兢。1)驗(yàn)證昨忆,文件格式、元數(shù)據(jù)杉允、字節(jié)碼邑贴、符號(hào)引用驗(yàn)證;2)準(zhǔn)備叔磷,為類的靜態(tài)變量分配內(nèi)存拢驾,并將其初始化為默認(rèn)值;3)解析改基,把類中的符號(hào)引用轉(zhuǎn)換為直接引用 ?? ???? 3.初始化繁疤,為類的靜態(tài)變量賦予正確的初始值 ?? ???? 4.使用,new出對(duì)象程序中使用 ?? ???? 5.卸載秕狰,執(zhí)行垃圾回收
?五.類加載器
?? ???? 1.啟動(dòng)類加載器:Bootstrap ClassLoader稠腊,負(fù)責(zé)加載存放在JDK\jre\lib(JDK代表JDK的安裝目錄,下同)下鸣哀,或被-Xbootclasspath參數(shù)指定的路徑中的架忌,并且能被虛擬機(jī)識(shí)別的類庫(kù)
?? ???? 2.擴(kuò)展類加載器:Extension ClassLoader,該加載器由sun.misc.Launcher$ExtClassLoader實(shí)現(xiàn)我衬,它負(fù)責(zé)加載DK\jre\lib\ext目錄中叹放,或者由java.ext.dirs系統(tǒng)變量指定的路徑中的所有類庫(kù)(如javax.*開頭的類),開發(fā)者可以直接使用擴(kuò)展類加載器挠羔。
?? ???? 3.應(yīng)用程序類加載器:Application ClassLoader井仰,該類加載器由sun.misc.Launcher$AppClassLoader來(lái)實(shí)現(xiàn),它負(fù)責(zé)加載用戶類路徑(ClassPath)所指定的類破加,開發(fā)者可以直接使用該類加載器
九.GC算法
?? ?GC最基礎(chǔ)的算法有三種:標(biāo)記 -清除算法糕档、復(fù)制算法、標(biāo)記-壓縮算法拌喉,我們常用的垃圾回收器一般都采用分代收集算法速那。
?? ???? 1.標(biāo)記 -清除算法,“標(biāo)記-清除”(Mark-Sweep)算法尿背,如它的名字一樣端仰,算法分為“標(biāo)記”和“清除”兩個(gè)階段:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收掉所有被標(biāo)記的對(duì)象田藐。
?? ???? 2.復(fù)制算法荔烧,“復(fù)制”(Copying)的收集算法吱七,它將可用內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊鹤竭。當(dāng)這一塊的內(nèi)存用完了踊餐,就將還存活著的對(duì)象復(fù)制到另外一塊上面,然后再把已使用過(guò)的內(nèi)存空間一次清理掉臀稚。
?? ???? 3.標(biāo)記-壓縮算法吝岭,標(biāo)記過(guò)程仍然與“標(biāo)記-清除”算法一樣,但后續(xù)步驟不是直接對(duì)可回收對(duì)象進(jìn)行清理吧寺,而是讓所有存活的對(duì)象都向一端移動(dòng)窜管,然后直接清理掉端邊界以外的內(nèi)存
?? ???? 4.分代收集算法,“分代收集”(Generational Collection)算法稚机,把Java堆分為新生代和老年代幕帆,這樣就可以根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴ā?/p>
匿名內(nèi)部類的使用:
匿名內(nèi)部類是沒有名字的類,只在某一處被使用赖条,不會(huì)被多處調(diào)用失乾,一般是某個(gè)父類或接口的特定實(shí)現(xiàn)。
強(qiáng)引用纬乍、軟引用仗扬、弱引用和虛引用:
強(qiáng)引用: 一般的引用都是強(qiáng)引用,即使OutOfMemory也不會(huì)回收這部分被把持的引用內(nèi)存蕾额。
軟引用(SoftReference): 如果內(nèi)存空間足夠,垃圾回收器就不會(huì)回收它彼城;如果內(nèi)存空間不足了诅蝶,就會(huì)回收這些對(duì)象的內(nèi)存。只要垃圾回收器沒有回收它募壕,該對(duì)象就可以被使用调炬。++軟引用可以用來(lái)實(shí)現(xiàn)內(nèi)存敏感的高速緩存。++
弱引用(WeakReference):弱引用的對(duì)象擁有更短暫的生命周期舱馅。當(dāng)垃圾回收期發(fā)現(xiàn)只有若引用的對(duì)象缰泡,不論內(nèi)存空間足夠與否,都會(huì)回收它代嗤。
虛引用():虛引用不會(huì)決定對(duì)象的生命周期棘钞,如果一個(gè)對(duì)象僅持有一個(gè)虛引用,那么它隨時(shí)可能被回收干毅。++虛引用主要用來(lái)跟蹤對(duì)象被垃圾回收器回收的活動(dòng)宜猜。++
2、抽象類要被子類繼承硝逢,接口要被類實(shí)現(xiàn)姨拥。
3绅喉、接口只能做方法申明,抽象類中可以做方法申明叫乌,也可以做方法實(shí)現(xiàn)
接口里面的方法變量都是public的柴罐,但是抽象類 可以有自己的私有方法和實(shí)現(xiàn) 繼承抽象類必須實(shí)現(xiàn)里面所有的抽象方法不然也會(huì)變成抽象類
final的用法(final變量一旦被初始化賦值之后,就不能再被賦值了):
可以用來(lái)修飾變量憨奸,類革屠,方法;
當(dāng)用final修飾一個(gè)類時(shí)膀藐,表明這個(gè)類不能被繼承屠阻。也就是說(shuō),如果一個(gè)類你永遠(yuǎn)不會(huì)讓他被繼承额各,就可以用final進(jìn)行修飾国觉。final類中的成員變量可以根據(jù)需要設(shè)為final,但是要注意final類中的所有成員方法都會(huì)被隱式地指定為final方法虾啦。
使用final方法的原因有兩個(gè)麻诀。第一個(gè)原因是把方法鎖定,以防任何繼承類修改它的含義傲醉;第二個(gè)原因是效率蝇闭。在早期的Java實(shí)現(xiàn)版本中,會(huì)將final方法轉(zhuǎn)為內(nèi)嵌調(diào)用硬毕。但是如果方法過(guò)于龐大呻引,可能看不到內(nèi)嵌調(diào)用帶來(lái)的任何性能提升。在最近的Java版本中吐咳,不需要使用final方法進(jìn)行這些優(yōu)化了逻悠。“
因此韭脊,如果只有在想明確禁止 該方法在子類中被覆蓋的情況下才將方法設(shè)置為final的童谒。
對(duì)于一個(gè)final變量,如果是基本數(shù)據(jù)類型的變量沪羔,則其數(shù)值一旦在初始化之后便不能更改饥伊;如果是引用類型的變量,則在對(duì)其初始化之后便不能再讓其指向另一個(gè)對(duì)象
? static final用來(lái)修飾成員變量和成員方法蔫饰,可簡(jiǎn)單理解為“全局常量”琅豆!
??????? 對(duì)于變量,表示一旦給值就不可修改篓吁,并且通過(guò)類名可以訪問(wèn)趋距。
??????? 對(duì)于方法,表示不可覆蓋越除,并且可以通過(guò)類名直接訪問(wèn)节腐。
被static修飾的成員變量和成員方法獨(dú)立于該類的任何對(duì)象外盯。也就是說(shuō),它不依賴類特定的實(shí)例翼雀,被類的所有實(shí)例共享饱苟。只要這個(gè)類被加載,Java虛擬機(jī)就能根據(jù)類名在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi)定找到他們狼渊。因此箱熬,static對(duì)象可以在它的任何對(duì)象創(chuàng)建之前訪問(wèn),無(wú)需引用任何對(duì)象狈邑。
泛型的使用:個(gè)人覺得是一種規(guī)范城须,類似標(biāo)準(zhǔn)的接口? 定義泛型變量 可以做一些通用的類處理<?> 比起最早使用的object 更加優(yōu)雅規(guī)范一些
spring 控制反轉(zhuǎn)? 面向切面:http://blog.csdn.net/luoshenfu001/article/details/5816408