今天呢 利用閑余時(shí)間讀了Java編程思維里的前三章,基本上是介紹Java中的各種基礎(chǔ)知識(shí)侈净,自己接觸開(kāi)發(fā)這一塊也接近一年了连锯。再會(huì)回過(guò)頭看基礎(chǔ)知識(shí)的時(shí)候归苍,也有些收獲。
1 對(duì)象的finalize()方法
和java的內(nèi)存回收機(jī)制有關(guān)系运怖,當(dāng)一個(gè)對(duì)象被回收的時(shí)候,會(huì)調(diào)用這個(gè)對(duì)象的finalize()方法夏伊,但是我們一般不用重寫(xiě)這個(gè)方法摇展,除非你有特殊需求的時(shí)候。經(jīng)過(guò)查資料得知溺忧,比如在JNI或者與C++交互的時(shí)候咏连,由于C語(yǔ)言和C++的特點(diǎn),垃圾回收機(jī)制不能正確的回收通過(guò)C或者C++new出來(lái)的內(nèi)存空間鲁森,這個(gè)時(shí)候祟滴,就需要手動(dòng)去回收了。個(gè)人覺(jué)得歌溉,這個(gè)方法可以用來(lái)在這個(gè)對(duì)象被銷(xiāo)毀的時(shí)候垄懂,做一些數(shù)據(jù)的存留或者掃尾工作。另外痛垛,學(xué)習(xí)到一個(gè)和System.gc()作用的相同的方法草慧,System.runFinalize();這個(gè)方法的作用和System.gc()的作用是一樣的,通知內(nèi)存回收機(jī)制注意回收這塊內(nèi)存匙头,但是只能是通知作用漫谷,具體什么時(shí)候回收跟java內(nèi)存回收機(jī)制的算法有關(guān)。
2 static關(guān)鍵字蹂析。
這個(gè)平時(shí)就用的比較多了舔示,static 相信每個(gè)接觸過(guò)java的都對(duì)這個(gè)關(guān)鍵字很熟悉,畢竟你保存常量电抚,單例模式惕稻,各種各種,都會(huì)用到static關(guān)鍵字喻频。
下面是static的一些定義:
static表示“全局”或者“靜態(tài)”的意思缩宜,用來(lái)修飾成員變量和成員方法,也可以形成靜態(tài)static代碼塊甥温,但是Java語(yǔ)言中沒(méi)有全局變量的概念
被static修飾的成員變量和成員方法獨(dú)立于該類(lèi)的任何對(duì)象锻煌。也就是說(shuō),它不依賴(lài)類(lèi)特定的實(shí)例姻蚓,被類(lèi)的所有實(shí)例共享宋梧。只要這個(gè)類(lèi)被加載,Java虛擬機(jī)就能根據(jù)類(lèi)名在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi)定找到他們狰挡。因此捂龄,static對(duì)象可以在它的任何對(duì)象創(chuàng)建之前訪(fǎng)問(wèn)释涛,無(wú)需引用任何對(duì)象。
用public修飾的static成員變量和成員方法本質(zhì)是全局變量和全局方法倦沧,當(dāng)聲明它類(lèi)的對(duì)象時(shí)唇撬,不生成static變量的副本,而是類(lèi)的所有實(shí)例共享同一個(gè)static變量展融。
static變量前可以有private修飾窖认,表示這個(gè)變量可以在類(lèi)的靜態(tài)代碼塊中,或者類(lèi)的其他靜態(tài)成員方法中使用(當(dāng)然也可以在非靜態(tài)成員方法中使用--廢話(huà))告希,但是不能在其他類(lèi)中通過(guò)類(lèi)名來(lái)直接引用扑浸,這一點(diǎn)很重要。實(shí)際上你需要搞明白燕偶,private是訪(fǎng)問(wèn)權(quán)限限定喝噪,static表示不要實(shí)例化就可以使用,這樣就容易理解多了指么。
static前面加上其它訪(fǎng)問(wèn)權(quán)限關(guān)鍵字的效果也以此類(lèi)推.酝惧。static修飾的成員變量和成員方法習(xí)慣上稱(chēng)為靜態(tài)變量和靜態(tài)方法,可以直接通過(guò)類(lèi)名來(lái)訪(fǎng)問(wèn)
靜態(tài)方法在調(diào)用的時(shí)候涧尿,不用加載類(lèi)的實(shí)例就可以直接用系奉。這就是為什么常用的main()方法是static關(guān)鍵字來(lái)修飾的了。
下面記下之前面試時(shí)候被問(wèn)到單例模式的懶漢和餓漢模式:
1 懶漢模式(類(lèi)加載時(shí)不初始化)
package Singleton;
public class LazySingleton {
//懶漢式單例模式
//比較懶姑廉,在類(lèi)加載時(shí)缺亮,不創(chuàng)建實(shí)例,因此類(lèi)加載速度快桥言,但運(yùn)行時(shí)獲取對(duì)象的速度慢
private static LazySingleton intance = null;//靜態(tài)私用成員萌踱,沒(méi)有初始化
private LazySingleton()
{
//私有構(gòu)造函數(shù)
}
public static synchronized LazySingleton getInstance() //靜態(tài),同步号阿,公開(kāi)訪(fǎng)問(wèn)點(diǎn)
{
if(intance == null)
{
intance = new LazySingleton();
}
return intance;
}
}
2 餓漢式單例模式(在類(lèi)加載時(shí)就完成了初始化并鸵,所以類(lèi)加載較慢,但獲取對(duì)象的速度快)
package Singleton;
public class EagerSingleton {
//餓漢單例模式
//在類(lèi)加載時(shí)就完成了初始化扔涧,所以類(lèi)加載較慢园担,但獲取對(duì)象的速度快
private static EagerSingleton instance = new EagerSingleton();//靜態(tài)私有成員,已初始化
private EagerSingleton()
{
//私有構(gòu)造函數(shù)
}
public static EagerSingleton getInstance() //靜態(tài)枯夜,不用同步(類(lèi)加載時(shí)已初始化弯汰,不會(huì)有多線(xiàn)程的問(wèn)題)
{
return instance;
}
}
以上就是今天看書(shū)所得,明天繼續(xù)看湖雹,加油咯~~~