成員變量的定義是絕對安全的,對象創(chuàng)建時會自動初始化,布爾值初始化為false,基本數(shù)據(jù)類型初始化為0,對象類型(包括String)初始化為null。
通過clone方法,可以不調(diào)用構(gòu)造函數(shù)而直接創(chuàng)建對象,雖然object類中定義了clone方法,但是1個對象中調(diào)用clone方法會致使異常,除非該對象實現(xiàn)了cloneable接口,當(dāng)創(chuàng)建1個對象代價很高時,clone方法可以稱成為1種有用的優(yōu)化方式。通過復(fù)制構(gòu)造函數(shù)(以已有實例作為其唯1參數(shù))顯得更簡單,代價可以疏忽不計。
若果單1類型的對象具有不同的行動,則認(rèn)為該語言具有多態(tài)性,如果某個類的子類可以被賦給其基礎(chǔ)類型的變量,那末就認(rèn)為這個類是多態(tài)的。不要過量類型轉(zhuǎn)換,遵照靜態(tài)類型準(zhǔn)則。子類型可以取代父類型是多態(tài)性的1個重要特點。
在java中,參數(shù)都是按值傳遞,函數(shù)的參數(shù)就是調(diào)用時所傳遞值得1個副本。另外在java中,大部份情況下,變量是對象的援用,java只是復(fù)制援用,而不是全部對象,利用就是所傳遞的值。
Throwable包括Error Errors和Exception
Exception包括 Checked exceptions
和Runtime exception 即Unchecked exceptions
Error類及其子類是保存類,只用于Dalvik運行時環(huán)境本身的毛病。雖然可以寫代碼來捕獲Error或Throwable,但實際上,沒法捕捉到這些毛病。可許不可行,嘗試捕捉Throwable或Error的代碼絕對是徒勞的。
list是1種有序的集合,list中的對象和整數(shù)從0到length⑴逐一映照,list中可能存在重復(fù)元素。
map和list類似,list是把1組整數(shù)映照到1組對象中,而map是把1組key對象映照到1組value對象。
Iterator返回集合中的元素,其通過next方法,每次返回1個元素,
Iterator是對集合中所有元素進行操作的1種較好的方式,1般不建議采取下面這類遍歷方法:
for(int i = 0;i<list.size;i++){
String s = list.get(i);
//...
}
建議采取以下方式:
for(Iterator<String>i = list.iterator();i.hasNext();){
String s = list.get(i);
//...
}
后者簡化以下:
for(String s :list){
//...
}
ArrayList是1個支持?jǐn)?shù)組特點的list,他在履行索引查找操作時很快,但是觸及改變其大小的操作速度很慢。
LinkList可以快速改變大小,但是查找速度很慢。
HashSet是1個以hash方式實現(xiàn)的set,在hashset中,增刪元素,判斷是不是包括某個元素及獲得hashset的大小這些操作都可以在常數(shù)級時間內(nèi)完成,hashset可以為空。
HashMap是使用hash表作為索引,其實現(xiàn)了map接口,在hashmap中,增刪元素,判斷是不是包括某個元素及獲得hashset的大小這些操作都可以在常數(shù)級時間內(nèi)完成。他最多只可以包括1個空的key值,但是可以有任意個value值為空的元素。
TreeMap,TreeMap是1個有序的map,如果實現(xiàn)了comparable接口,則TreeMap中的對象是按自然數(shù)排序,如果沒有實現(xiàn)comparable接口,則是根據(jù)傳遞給TreeMap構(gòu)造函數(shù)的comparable類來排序。
java中對象鎖是可重入的reentrant,以下代碼非常安全,不會造成任何死鎖:
class SafeSeizure{
private Object lock = new Object();
public void method1(){
synchronized(lock){
//do stuff
method2();
}
}
public void method2(){
synchronized(lock){
//do stuff
}
}
}