Java進階總結
一、多執行緒:
1.多執行緒
基本方法:同步,死鎖實現手段:Runnable介面,Thread類
其中:1.Thread類定義於java.lang
2.一個類extends Thread後覆蓋本類中run()方法,就可實現多執行緒
二、JNDI(Java Naming and Directory Interface,Java命名和目錄介面)是一組在Java應用中訪問命名和目錄服務的API。命名服務將名稱和物件聯絡起來,使得我們可以用名稱訪問物件。目錄服務是一種命名服務,在這種服務裡,物件不但有名稱,還有屬性。
常用的JNDI操作
void bind(String sName,Object object);――繫結:把名稱同對象關聯的過程
void rebind(String sName,Object object);――重新繫結:用來把物件同一個已經存在的名稱重新繫結
void unbind(String sName);――釋放:用來把物件從目錄中釋放出來
Object lookup(String sName);――查詢:返回目錄中的一個物件
void rename(String sOldName,String sNewName);――重新命名:用來修改物件名稱繫結的名稱
NamingEnumeration listBinding(String sName);――清單:返回繫結在特定上下文中物件的清單列表
NamingEnumeration list(String sName);
程式碼示例:重新得到了名稱、類名和繫結物件。
NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");
三、常用函式
Calendar.add(Calendar.DAY_OF_MONTH, 1); //當前所在天數+1,即是次日
四、inputstreamreader 和 fileinputstream區別:
inputstreamreader的特點:
建構函式帶兩個引數,一是關聯到的檔案,二是字元解碼方式. 所以實際上通過inputstreamreader例項讀出來的東西已經不是磁碟上原始的位元組資料了,而是根據你指定的解碼方式(如果你沒有指定,則使用系統預設的,win2000下是gbk/gb2312)把位元組流轉換成了字元流,注意位元組流和字元流的區別,一個位元組就是8位元位(32位機器上),而一個字元含多少位元組則與不同的編碼/解碼方式有關了,如gbk是一位元組,utf-8是1-3的變長位元組,utf-16是2個定長位元組。
fileinputstream的特點:
它的建構函式就一個,即關聯到的檔案,既然沒有指定解碼方式,那它所做的就是隻以位元組流的方式讀出檔案而不做任何處理, 你應該用一個位元組陣列來接受它,對該陣列你以後還可以做任何想做的操作.
五、異常就是方法非正常情況下的返回值
六、建立Junit單元測試框架(具體檢視個人收藏夾,可以參考:http://www.ibm.com/developerworks/cn/java/j-lo-test-multithread/index.html)
1.新增junit的jar 包
2.建立JUnit Test Case
3.選擇需要單元測試的類方法
4.在新生成的xxxTest類中編寫測試用例
5.測試:執行run as a Junit Test
(已完成初級,中級篇,高階為完成)
六、記憶體洩露總結
1、儘早釋放無用物件的引用。特別是大物件和集合物件,通過置為NULL,暗示垃圾收集器來收集該物件,防止發生記憶體洩露。
2、程式中如果出現大量使用字串處理,避免使用 String ,應使用 StringBuffer。
- for(Int i=0;i<100;i++)
- {
- String s1="";
- s1=s1+"abc";//不要這樣寫
- }
3、儘量少用靜態變數,因為靜態變數是全域性的, GC 不會回收的;
4、檢查List、MAP等集合物件是否有使用完後,未清除的問題。List、MAP等集合物件會始終存有對物件的引用,使得這些物件不能被GC回收。
總結:
1.敢於重構程式碼,創新學習
2.設計模式真的很簡單,比如好多都是繼承+多型(或著說一個介面/抽象類加上幾個實現類)就成為模式了(比如模版方法、策略模式等)
3.幾行優雅的程式碼是靠幾萬行白話一般的程式碼積累出來的
4.拿自己做過的專案多總結,多重構,要是再結合設計模式的概念一起思想一下,自然而然的就會設計模式了,這也是噁心過去噁心過來所得到的
5.寫的程式碼比較多了,可以自己抽象出來很多可複用的類。有意識的運用一些模式,注重對程式碼的重構,對程式的可擴充套件性有很實在的好處