java學習總結1

參考書目:《21天學通java》,《java第一步》

JAVA的三大特徵:繼承,封裝,多態。
對象可以通過限定符等手段控制外界對它的瞭解程度以及如何進行交互,這就叫做封裝
方法的重載和方法的覆蓋實現了多態//我的理解就是一個對象對同一消息的不同響應,或者是同一接口的不同實現方法。
子類繼承父類的特徵和行爲,使得子類具有父類的各種屬性和方法,這就叫做繼承
1.實例變量,實例,對象,類,類變量相互之間還有自身之間的關係?
實例變量(對象變量)定義了特定對象的屬性,值隨對象而定。
實例變量和類變量都是全局變量,之間區別在於static。每個實例都有實例變量的一個副本,而類變量只有一個,修改以後會改變所有對象中的值。
對象也可以作爲實例變量例如,String類型的變量。
實例變量和類變量以及方法共同構成了類。
2.數據類型分爲基本數據類型對象型的數據類型
對象型的數據類型不僅包含了對應的基本數據類型還包含了其方法。
區別就是 棧內存中 基本類型存放的是數值,引用類型存放的是引用的 類在堆內存中的地址
基本數據類型:int char double float short long Boolean Byte
對象型數據類型(均爲首字母大寫):Byte Boolean Character Short Integer Long Double Float
(類似的還有String,point)
//句柄就是指向內存裏面對象首地址的引用(32bit)
3.對象的創建過程。
創建給定類的實例,分配內存空間,調用構造方法:
如String s1=new Sring(“hello world”)
其中s1是對左邊的實例的引用,存儲在變量空間s1的內容就是實例的首地址就是對實例的引用。引用是一個地址,他指明瞭對象的變量和方法的存儲。多個對於對象的引用就是同一個地址,修改一個其他都要變。//類似於指針?(就是可以理解爲c中的指針,只不過在JAVA中並沒有顯式的指明出來。)
每個實例都有實例變量的一個副本,而類變量只有一個,修改以後會改變所有對象中的值。使用 . 訪問對象中的變量或者方法,所以實例變量只能使用對象名來訪問,而類變量或者是類方法可以由對象名或者類名來訪問修改。
格式化輸出:通過調用類方法System.out.format()格式化輸出。(類似於c語言的格式化輸出)。
嵌套方法的調用:如果方法返回了一個對象,可以調用該對象的方法。
例如customer.cancelOrder().fileComplaint()
或者private Color createColor(int r,int g,int b)
{
    return new Color(r,g,b);
}
上例中前一個對象的方法返回了一個對象,在這個對象中定義了fileComplaint()方法。
還可以嵌套訪問實例變量:
System.out.println()
System類中存在一個out類變量存儲了1個PrintStream實例,該實例中有一個方法println().
4.強制類型的轉換。
基本類型的轉換:(typename)value(注意精度問題)
強制轉換對象:(classname)object(1.目標與源目標值將應該是繼承關係。2.創建的  classname對象只是一個引用,原來的對象繼續存在。3.超類向子類轉換的時候,不能 調用子類的某些方法,精度會降低。)
基本類型和對象之間的相會轉換:自動封裝和拆封。
Float f1=new float(12.5);//自動封裝
Float f2=new float(13.6);
System.out.println(math.min(f1,f2));//自動拆封
5.對象的比較,判斷對象所屬的類。
在java當中==,!=都只適用於基本類型,對象都只是引用,如果使用
str1==str2則會返回false,當兩者引用相同對象的時候返回ture,
str1=str2;
str1==str2返回ture
對於類似String的引用類型,當字符串參數相同的時候,但是由於並沒有指向同一個對象,所以使用==返回false,在這裏可以使用equals()方法來進行比較,該方法是Object類的方法。在每個具體的類中的實現不相同,可以更具自己的需要進行覆蓋。(例如該方法在String對象中是比較string字符串數組是否相同,如果相同返回ture,不同返回false)。
//直接打印對象的結果?是引用的地址還是對象的地址?直接打印是調用的toString()方法轉換成字符串輸出,一般都要覆蓋掉這個方法。
test obj=new test();
System.out.println(obj);//等同於System.out.println(obj.toString());當Java對象和字符串進行連接運算時,系統會自動調用Java對象toString的返回值和字符串進行連接運算。
此時的輸出是類似於obj@6544456就是"類名 + @ + hashCode值"
通過在test中覆蓋掉toString(){
Return “這是一個測試”;}
然後再執行上述語句,輸出結果就是這是一個測試。
6.判斷對象所屬的類。
可以通過反射機制來判斷。
String name=key.getClass().getName()
也可以使用運算符instanceof,它使用兩個操作數,左邊是對象的引用,右邊是類名或者是接口名。如果有繼承關係則返回true,沒有則返回false。
7.限定符的使用。
無限定符(默認):只能被同一個包中的類使用。
私有(private):只能在自身的類中被使用,不能被子類所繼承。一般是比較重要的變量且  不希望被其他類修改。//其方法是隱式的申明final限定符
可以在類中設置公有方法又叫存儲器方法set()和get()分別修改私有變量:
Setvaluenamevalue){
              this.y=value;//假設私有變量爲整數對象y
}
int getvaluename (){
              return this.y;
}
公有(public):可以被所有類使用。
保護(protect):可以被子類和同一個包中的類使用。
靜態(static):創建類變量和類方法,靜態方法不能被覆蓋,只是被隱藏了。
final限定符:final類不能被繼承,final方法不能被子類覆蓋,final變量的值不能被修改。//犧牲了靈活性,換來了效率,在該限定符修飾的方法被使用的時候,不必從下往上的查找該方法,在比那一的時候JAVA編譯器就已經將可執行字節碼放入到調用它的程序。
抽象(abstract):只有屬性和行爲而沒有具體的方法
8.關於關鍵字this和super
在當前類的方法中引用實例變量或者是方法,使用this關鍵字,this是當前類的一個引用。
在子類中引用超類的方法,使用super關鍵字,super是超類的一個引用。
在對構造方法的引用使用this(),還有super();
如果新的方法需要擴展而不是覆蓋則可通過調用關鍵字進行擴展。
9.方法的重載:通過相同的函數名構建函數,通過參數個數以及參數的類型進行區分。
10.方法的覆蓋:是指在子類中採用同名方法覆蓋掉超類的方法。
11.接口:解決單繼承的問題可以被任何類繼承。一個類可以繼承多個接口。其接口內的方法都是被抽象和公有的。//接口是抽象類的特例?
聲明新的接口使用interface,繼承一個接口使用extends。
12.異常和線程
引發異常,捕獲異常
Try{//可能發生異常的語句
}catch(obj//實例化可能的異常類否則用Exeption){//處理異常的具體過程
}finally{//總是執行該語句
}
拋出異常throws
創建異常類,有兩個構造方法,一個不接受參數一個接受一個字符串參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章