基礎
1.變量
理解為對存儲數據的操作,需要指明類型和變量名,使用前需要初始化
2.基本類型
分為:整數(byte,short,int,long)
浮點(float,double)
Char
Boolean
2.1Int:正負21億左右;相除是舍棄尾數;結果過大會溢出,正變負,負變正;0X開頭是16進制,0開頭是8進制。
2.2Long:大小-2e(64-1)~~2e(63-1)
-1;直接賦值需要在值后面加上l;計算大數據在后
2.3Double和float:默認小數為double;double是float的兩倍,所以叫double;十進制對于1/10表示會有誤差,所以需要精確計算需要BigDecimal;
2.4Char:實際為一個非負正數;
2.5Boolean:只有true和false;
2.6基本類型間的轉換:
整數直接量可以直接復制給byte, short,
char ,他們參與運算直接轉換為int類型。
基本類型的轉換: 隱式(從小到大)強制(從大到小)
隱式的:多種類型之間運算時,自動從小的類型轉換為大的類型;
byte,char,short運算時都先轉換為int類型再運算
強制轉換:(需要轉換的類型)變量 有可能精度損失或則溢出
3.運算符號
3.1運算符號:%(取模),++,--(放在前面是先自增,放在后面是使用后在自增)
3.2關系符:<,
>, >=, <=, ==, != , &&(第一個為false就不再計算), !, ||(第一個為true就不再計算)。
3.3賦值運算符:” =”將右邊的值賦值給左邊。在前面加上其他運算符則為擴展運算符如:+=,-=等,其運算效率比較高;
3.4+:除了運算可以實現字符串連接;快速賦值為字符串,其他類型連接:+“”;
3.5條件(三木)運算:boolean表達式?表達式1:表達式2。計算boolean表達式,為true則結果是表達式1,是false則結果是表達式2條件運算符可以嵌套使用String r =
a > 0 ? "正數" : (a == 0 ?
"0":"負數");
注意:浮點計算不能用double二進制無法準確的表示1/10
計算后的類型轉換:byte b2 =
(byte)(b1+b2);不能寫成:byte b2 =(byte)b1+b2;
4.條件選擇
4.1任何復雜的邏輯順序都可以通過順序,分支,循環三種基本的程序結構實現
4.2分支
4.2.1If;
4.2.2if
else;
4.2.3switch
1.7之前是只能整型,之后是可以string和char
swith() {
case整型常量值1: 語句1; 不加break會穿透(根據考慮使用);
……
default:語句n;
}
switch的本意是符合就執行所有后面語句代碼;
4.3循環
4.3.1While ( Boolean ){語句}和do {語句}while ( Boolean ) ;在于是否必須要執行執行語句;
4.3.2For: for(循環變量初始狀態1 ;循環條件2 ;循環條件的改變3 ){}
計算表達式1的值,通常為循環變量賦初值;
計算表達式2(表達式2為邏輯表達式)的值,即判斷循環條件是否為真,若值為真則執行循環體一次(語句塊),否則跳出循環;
執行循環體;
計算表達式3的值,此處通常寫更新循環變量的賦值表達式;如此循環往復,直到表達式2的值為false。
for語句通常用于解決固定次數循環的處理,它的三個參數都可以設置為空,但是“;”號不能少,表達式1,和表達式3都可以設置多個語句用“,”分開。直到……這樣的語句是,優先選擇do-while語句來實現;
4.3.3break和continue
1.break用于循環和switch表示跳出循環執行后面的語句。break只能跳出一層循環。
2.continue只能用于循環表示跳出此次循環體中剩余的語句執行下次循環。
5.集合
5.1數組:為相同元素的集合,按線性順序排列,每一個元素都有唯一的前驅元素;除最后一個元素外,每一個元素都有唯一的后繼元素(“一個跟一個”),可以通過元素所在位置的順序號(下標)做標識訪問每一個元素(下標從0開始,最大到元素個數-1),數組創建后長度不可改變。
5.1.1申明
數組類型[]數組名= new數據類型[大小];
確切數據類型:用于分配空間;數組名:用于后面引用;new用于創建數組,需要指定大小,數組大小指定后不可變;
5.1.2初始化:
基本類型在數組創建后會被賦予初始值,0;0.0;false等;
手動賦值:int [ ] arr = { 10,23,30,-10,21 } ;這種寫法只適合與聲明的時候,聲明之后再這樣賦值是不可以的。int[] arr;arr = new int[]{10,23,30,-10,21 };聲明之后的寫法;
注意:new之后的[]中不可以寫長度,而元素的個數就是數組的長度。
5.1.3數組的復制
1. System.arraycopy(Object src,int srcPso, Object src, int srcPso,int length)
參數的意義:源數組,起始位置,目標數組,目標數組中的起始位置,長度
2. Arrays.copyOf(數組的引用,int newLength)返回值為一個數組,多出的長度用默認值補齊。
5.1.4數組的排序:Arrays.sort();
5.1.5數組的排序:Arrays.toString()可以打印數組;
6.類
6.1引用
6.1.1除了8種基本類型的變量外其他都是引用類型的變量;
6.1.2引用:使用new的時候創建,Object obj = new Object();創建引用obj,new后面的是調用的類的構造方法;還可以通過賦值的方式創建:Object obj = object;此時創建引用obj,但是他和object指向同一個對象;
6.2方法:方法名和參數列表一個類中不可能有兩個方法簽名相同的方法
6.2.1構造方法與類同名,沒有返回值類型有訪問修飾符;
構造方法常常給成員變量初始化
造方法在創建對象時被自動調用的
JAVA語法規定,任何一個類都必須含有構造方法,假如源程序中沒有定義,則編譯器在編譯時將為其添加一個無參的空構造方法,當類定義了構造方法后,Java編譯器將不再添加默認的構造方法
構造方法可以重載
6.2.2方法重載:方法名相同,但是方法參數不一樣;
重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫,返回值和形參都不能改變。即外殼不變,核心重寫!
重寫的好處在于子類可以根據需要,定義特定于自己的行為。也就是說子類能夠根據需要實現父類的方法。
重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如:父類的一個方法申明了一個檢查異常IOException,但是在重寫這個方法的時候不能拋出Exception異常,因為Exception是IOException的父類,只能拋出IOException的子類異常。
參數列表必須完全與被重寫方法的相同;
返回類型必須完全與被重寫方法的返回類型相同;
訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明為public,那么在子類中重寫該方法就不能聲明為protected。
父類的成員方法只能被它的子類重寫。
聲明為final的方法不能被重寫。
聲明為static的方法不能被重寫,但是能夠被再次聲明。
子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了聲明為private和final的方法。
子類和父類不在同一個包中,那么子類只能夠重寫父類的聲明為public和protected的非final方法。
重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
構造方法不能被重寫。
如果不能繼承一個方法,則不能重寫這個方法
Super關鍵字的使用
當需要在子類中調用父類的被重寫方法時,要使用super關鍵字。
6.2.3方法重寫
重載(overloading)是在一個類里面,方法名字相同,而參數不同。返回類型可以相同也可以不同。
每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。
只能重載構造函數
重載規則
被重載的方法必須改變參數列表(參數個數或類型或順序不一樣);
被重載的方法可以改變返回類型;
被重載的方法可以改變訪問修飾符;
被重載的方法可以聲明新的或更廣的檢查異常;
方法能夠在同一個類中或者在一個子類中被重載。
無法以返回值類型作為重載函數的區分標準。
6.2.4重寫與重載之間的區別
區別點重載方法重寫方法
參數列表必須修改一定不能修改
返回類型可以修改一定不能修改
異常可以修改可以減少或刪除,一定不能拋出新的或者更廣的異常
訪問可以修改一定不能做更嚴格的限制(可以降低限制)
6.2.5總結
方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載是一類中多態性的一種表現。