Java基礎知識
一.final 與 Static
public static final 類常量窿吩,在類內(nèi)部多個方法中可用茎杂,若為public 在其他類當中也可用
靜態(tài)數(shù)據(jù)區(qū)不屬于堆,當然更不屬于對象纫雁,在靜態(tài)數(shù)據(jù)區(qū)
如果編譯器能夠在編譯階段確定某變量的值煌往,那么編譯器就會把該變量當做編譯期常量來使用
靜態(tài)方法在類加載的時候就存在了,它不依賴于任何實例
只能訪問所屬類的靜態(tài)字段和靜態(tài)方法轧邪,方法中不能有 this 和 super 關(guān)鍵字
二.java緩存池
1. 涉及知識點
自動裝箱與拆箱
聲明方法及值的比較
整型(I刽脖,S,L忌愚,Character曲管,Byte有緩存池,浮點型沒有
緩存池的大小
2. 參考文章
三.String 以及 StringPool
1.涉及知識點
生成的過程硕糊,new的話若pool里沒有院水,會自動添加到pool但是返回的還是堆里的地址
向string pool添加的過程
常量計算
intern方法的使用
不會被GC回收
字符串是常量,字符串池中的每個字符串對象只有唯一的一份简十,可以被多個引用所指向檬某,避免了重復創(chuàng)建內(nèi)容相同的字符串;通過字面值賦值創(chuàng)建的字符串對象存放在字符串池中螟蝙,通過關(guān)鍵字new出來的字符串對象存放在堆中恢恼。
String a = "hello";
string b = "lo";
System.out.println(a == "hel"+b); //false 在運行時通過連接計算出的字符串是新創(chuàng)建的,因此是不同的
System.out.println(a == "hel"+"lo");//true 由常量表達式計算出的字符串是在編譯時進行計算,然后被當作常量
/**
* string 與 final
* final修飾的b相當于常量胰默,是在編譯時就確定的场斑,所以b和d指向的是StringPool當中的同一個字符串
* 所以在計算c的時候,相當于常量表達式九三得到的值初坠,所以也是StringPool當中的“hello2”和簸,與a相同
* 而e則是在棧中通過連接新建的字符串
*/
public static void name() {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println((a == c));
System.out.println((a == e));
}
string 不可變,線程安全
stringBuffer 線程安全碟刺,內(nèi)部使用 synchronized 進行同步
stringBuider 線程不安全
2.參考文章
四.參數(shù)傳遞
1. 涉及知識點
java的傳參是call by value
對于基本數(shù)據(jù)類型锁保,是在棧里復制一份
對于對象的引用,在棧里復制的是對象的引用,形參可以修改對象當中的參數(shù)爽柒,當指向新的對象吴菠,則與原實無關(guān)
2. 參考文章
五. 繼承
1.涉及知識點
super調(diào)用父類同名變量及方法,顯示調(diào)用父類構(gòu)造器
父類的構(gòu)造器調(diào)用以及初始化過程一定在子類的前面
父類和子類的class文件都載入到內(nèi)存浩村,當父類和子類有Static時做葵。先初始化Static,再初始化子類的Static心墅,再初始化父類的其它成員變量->父類構(gòu)造方法->子類其它成員變量->子類的構(gòu)造方法酿矢。
如果是final方法,private 方法怎燥,static方法瘫筐,則不會進行動態(tài)綁定,知道調(diào)用哪一個方法
其他方法會進行動態(tài)綁定铐姚,則會根據(jù)類型選擇合適的方法
成員變量進行初始化過程如下:默認初始化-> 顯示初始化 -> 構(gòu)造方法初始化
靜態(tài)代碼塊 > 構(gòu)造代碼塊 > 構(gòu)造方法
先進行父類初始化策肝,然后進行子類初始化
父類(靜態(tài)變量、靜態(tài)語句塊)
子類(靜態(tài)變量隐绵、靜態(tài)語句塊)
父類(實例變量之众、普通語句塊)
父類(構(gòu)造函數(shù))
子類(實例變量、普通語句塊)
子類(構(gòu)造函數(shù))
2.參考文章
六.重寫與重載
1.知識點
this.show(O)
super.show(O)
this.show((super)O)
super.show((super)O)
其中若B繼承A,然后有A a2 = new B(); 則a2保存的是B的引用峭跳,但是a2的類型是A帘睦,this指向的也是A
2.文章
習題解答
隱藏與覆蓋
隱藏與覆蓋最好的解釋版本
七.equals()與hashCode()
1.知識點
對于基本類型,== 判斷兩個值是否相等坦康,基本類型沒有 equals() 方法。
對于引用類型诡延,== 判斷兩個變量是否引用同一個對象滞欠,而 equals() 判斷引用的對象是否等價。
檢查是否為同一個對象的引用肆良,如果是直接返回 true筛璧;
檢查是否是同一個類型,如果不是惹恃,直接返回 false夭谤;
將 Object 對象進行轉(zhuǎn)型;
判斷每個關(guān)鍵域是否相等巫糙。
在覆蓋 equals() 方法時應當總是覆蓋 hashCode() 方法朗儒,保證等價的兩個對象散列值也相等。
7.clone
1.知識點
克隆方法用于創(chuàng)建對象的拷貝,為了使用clone方法醉锄,類必須實現(xiàn)java.lang.Cloneable接口重寫protected方法clone乏悄,如果沒有實現(xiàn)Clonebale接口會拋出CloneNotSupportedException.
在克隆java對象的時候不會調(diào)用構(gòu)造器
java提供一種叫淺拷貝(shallowcopy)的默認方式實現(xiàn)clone,創(chuàng)建好對象的副本后然后通過賦值拷貝內(nèi)容恳不,意味著如果你的類包含引用類型檩小,那么原始對象和克隆都將指向相同的引用內(nèi)容,這是很危險的烟勋,因為發(fā)生在可變的字段上任何改變將反應到他們所引用的共同內(nèi)容上规求。為了避免這種情況,需要對引用的內(nèi)容進行深度克隆卵惦。
使用 clone() 方法來拷貝一個對象即復雜又有風險阻肿,它會拋出異常,并且還需要類型轉(zhuǎn)換鸵荠。Effective Java 書上講到冕茅,最好不要去使用 clone(),可以使用拷貝構(gòu)造函數(shù)或者拷貝工廠來拷貝一個對象蛹找。
2. 文章
clone講解
八.反射
1.知識點
反射的核心是 JVM 在運行時才動態(tài)加載類或調(diào)用方法/訪問屬性姨伤,它不需要事先(寫代碼的時候或編譯期)知道運行對象是誰
Java反射的主要功能
在運行時判斷一個對象所屬的類,instanceof
在運行時構(gòu)造任意類的對象庸疾,使用Class對象的newinstance方法構(gòu)造Object對象
判斷一個類所具有的成員變量和方法乍楚,getMethods,getDeclaredMethods届慈,getFields徒溪,getDeclaredMethods
在運行時調(diào)用任意一個對象的方法
九.泛型
1.知識點
什么是泛型以及泛型的好處:操作的數(shù)據(jù)類型被指定為一個參數(shù),這種參數(shù)類型可以用在類金顿、接口和方法中臊泌,分別被稱為泛型類、泛型接口揍拆、泛型方法渠概。
類型擦除: Java 的泛型在編譯器有效,在運行期被刪除嫂拴,也就是說所有泛型參數(shù)類型在編譯后都會被清除掉
泛型數(shù)組初始化時不能聲明泛型類型
instanceof()不允許使用泛型參數(shù)
泛型的class都是相同的播揪,例如:
List<String> ls = new ArrayList<String>();
List<Integer> li = new ArrayList<Integer>();
System.out.println(ls.getClass() == li.getClass()); //true
類型參數(shù)并不能用來創(chuàng)建對象或是作為靜態(tài)變量的類型
泛型的限定通配符以及非限定通配符 PECS原則,帶有超類的通配符可以向泛型當中寫入筒狠,帶有子類型限定的通配符可以從泛型對象讀取
利用類型參數(shù)創(chuàng)建實例的做法編譯器不會通過
2.相關(guān)文章
十.注解
1.知識點
定義該Annotation時使用了@Retention和@Target兩個系統(tǒng)元注釋辩恼,其中@Retention注釋指定Test注釋可以保留多久雇庙,@Target注釋指定Test注釋能修飾的目標(只能是方法)
僅僅使用注釋來標識程序元素對程序是不會有任何影響的谓形,這也是Java注釋的一條重要原則
標記Annotation 程序通過判斷該Annotation來決定是否運行指定方法,沒有任何成員變量
元數(shù)據(jù)Annotation 簡化事件編程
注解更像是一種特殊的接口状共,注解的屬性定義方式就和接口中定義方法的方式一樣套耕,而應用了注解的類可以認為是實現(xiàn)了這個特殊的接口
2.相關(guān)文章
最后編輯于 :2019.03.16 16:20:03
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者