1. 程式人生 > >Java基礎篇(三)--- 抽象類,介面,final,單目運算子

Java基礎篇(三)--- 抽象類,介面,final,單目運算子

多型
①父類引用指向子類:
java允許父類的引用變數引用它的子類的例項(物件)
Animal animal = new Cat();
這種轉換是自動完成的
子類在一定條件下是可以轉換為父類的
②繼承:
類的單繼承和介面的多繼承,都能體現多型
③重寫、過載
過載:同一個類的同名函式(方法的引數型別、個數、順序至少有一項不同)
重寫:子類重寫父類方(子類的方法的返回型別,引數,方法名稱要和父類保持一致;子類不能縮小父類方法的訪問許可權)

抽象類、介面、final
1.抽象類
父類方法不確定時,可以使用抽象方法
①有抽象方法的類,一定是抽象類;但是抽象類不一定有抽象方法
②當一個類繼承抽象類時,需要我們把抽象類中所有抽象方法全部實現
③抽象類不能被例項化,抽象方法不能有主體
2.介面
①當一個類實現了一個介面,就得把這個介面所有的方法都實現
②介面不能被例項化
③介面中所有的方法不能有主體
④介面中的變數,本質上都是static、final的;呼叫形式:介面名.變數名
⑤一個介面不能繼承別的類,但是可以繼承別的介面。介面繼承介面不需要實現所有的方法
⑥一個類可以實現多個介面

介面是更加抽象的抽象的類,抽象類裡可以有方法體,接口裡所有方法都沒有;介面體現了程式設計的多型和高內聚低耦合的設計思想
3.final
①當不希望父類的某個方法被子類覆蓋時,可以用final
②當不希望類的某個變數值被修改,可以用final
③當類不希望類被繼承時,可以用final
④如果一個變數是final的,定義時則必須賦初始值
final變數一般使用下劃線,rate_test

陣列
①陣列可存放同一型別資料,簡單資料型別(int,float)可直接賦值
②物件陣列定義後,賦值時需再次分配空間(即:new物件)
③陣列大小必須事先指定
④陣列名可以理解為指向陣列首地址的引用
⑤陣列的下標是從0開始編號的

位移, 與,或(都是以補碼運算的)
算數右移,邏輯右移:>>, >>>
原、反、補碼:
①:最高位符號位,0是正數,1是負數。
②:正數的原、反、補碼都一樣
③:負數的反碼=他的符號位不變,其他位取反
④:負數的補碼=他的反碼+1
⑤:0的反碼,補碼都是0
⑥:Java中的數都有符號,計算機運算時,都是以補碼方式運算的

&:兩位全為1,結果為1
| :兩位一個未1,結果為1
異或^: 兩個一個為0,一個為1,結果為1
按位取反~: 0->1,1->0 符號位也變,如果為負數,則轉換為原碼
算數右移:>> 地位溢位,符號位不變,並用符號位補溢位的高位
算數左移:<< 符號位不變,低位補0
邏輯右移:>>> 低位溢位,高位補0

排序
①內部排序:
將需要處理的所有資料都載入到內部儲存器中進行排序。
包括(交換式排序法、選擇式排序法、插入式排序法)
②外部排序法:
資料量過大,無法全部載入到記憶體中,需要藉助外部儲存進行排序。
包括(合併排序法和直接合並排序法)

方法體傳值,傳入的簡單型別的值,方法體內變,方法體外不變。而像類、陣列的這些會改變。

找錯誤
①int i;
for(i=5,int j =10;i<10;j–){}
②int i,j;
for(i=0,j=10;i<10,j>0;i++,j–){}
③int i,k;
for(i=0,k=9;(i<10&&k>0);i++,j–){}
④int i,j;
for(i=0;j=10;i<10;i++,j–){}
解析:①×,不考慮死迴圈的問題,去掉int i,再把for迴圈的int放在i的前面就可以了
for(int i=5,j =10;i<10;j–){}
②×,for迴圈的中間,刪掉一個判斷就好
int i,j;
for(i=0,j=10;j>0;i++,j–){} 或
for(i=0,j=10;i<10;i++,j–){}
③×,j沒有定義
④×,過多分號

long y = 1;
switch(y){
case 1:
System.out.println(“Got it”);
}
×,首先,switch裡面不能用long,其次,y是long型,而case 1的1是int型。

byte y = 1;
switch(y){
case 1/1:
System.out.println(“Got it”);
}