Java開發精華總結(第二章)


目錄

條件語句

循環語句

static修飾符

final修飾符

abstract修飾符


 

條件語句


條件語句就是先通過某個條件的判斷後再根據這個判斷的結果決定去如何操作的語句。例如幼兒園班級選擇我們就可以進行一條判斷,判斷小朋友的年齡是不是5歲,如果是5歲就可以上幼兒園小班。那麼判斷小朋友年齡就是一個條件,我們會根據這個條件判斷出來的結果來進行不同的操作。

Java中的條件語句有if語句switch語句

如果if條件成立時的執行語句只有一句,是可以省略大括號的。但是如果執行語句有多條,那麼大括號不可以省略。

if

if(條件){
    條件成立時執行的代碼
}

if...else

if(條件){
    代碼塊1(條件成立時執行的代碼)
}else{
    代碼塊2(條件不成立時候執行的代碼)
}

多重if...else

if(條件1){
    代碼塊1(滿足條件1的時候執行的代碼)
}else if(條件2){
    代碼塊2(滿足條件2的時候執行的代碼)
}else{
    代碼塊3(條件1和條件2都不滿足時執行的代碼)
}

嵌套if(只有當外層if條件成立時,纔會判斷內層if的條件)

if(條件1){
    if(條件2){
        先滿足條件1再滿足條件2執行的代碼
    }else{
        先滿足條件1沒滿足條件2執行的代碼
    }
}else{
    沒滿足條件1的時候執行的代碼
}

switch語句

switch後面小括號中表達式的值必須是整型字符型

case後面的值可以是常量數值,也可以是一個常量表達式,但不能是變量或帶有變量的表達式;

case匹配後,執行匹配塊裏的程序代碼,如果沒有遇見break會繼續執行下一個case塊的內容,知道遇到break語句或者switch語句塊結束;

可以把功能相同的case語句合併起來;

default塊可以出現在任意位置,也可以忽略不寫。

switch(表達式){
    case 值1:
        執行代碼塊1
        break;
    case 值2:
        執行代碼塊2
        break;
    case 值3:
        執行代碼塊3
        break;
    default:
    默認執行的代碼
}

 

 

循環語句


Java中常用的循環語句有while、do...while、for語句三種。

while語句特點是先判斷後執行。

do...while語句是先執行後判斷,所以do...while語句保證循環至少被執行過一次。

for語句相比於whle和do...while語句結構更加清晰易懂。

while循環

while(判斷條件){
    循環操作
}

do...while循環

do{
    循環操作
}while(判斷條件);

for循環

for(循環變量初始化;循環條件;循環變量變化){
    循環操作
}

foreach循環(增強for循環)

foreach適用於循環次數未知,或者計算循環次數比較麻煩情況下使用效率更高,但是更爲複雜的一些循環還是需要用到for循環效率更高。foreach雖然能遍歷數組或者集合,但是只能用來遍歷,無法在遍歷的過程中對數組或者集合進行修改,而for循環可以在遍歷的過程中對源數組或者集合進行修改,這是foreach的侷限性。

for (String name : names) {    循環names數組或者集合
       循環語句
 }

break語句

break語句的作用就是結束循環語句的執行,跳出循環。

continue語句

continue語句只能使用在循環語句內部,功能是跳過該次循環,繼續執行下一次循環結構。

 

 

static修飾符


static是個關鍵字,中文意思是靜態的,可以用來修飾屬性、方法、代碼塊和內部類。

使用static修飾的內容是屬於類的而不是屬於對象的,所以static修飾的成員變量一般稱作類成員變量(靜態成員變量),而static修飾的方法一般叫做類方法(靜態方法)。

 

static修飾符的特點

static修飾的屬性、方法等內容隨着所在類的加載而加載。當JVM把字節碼加載到JVM的時候,static修飾的內容已經存在於內存中了;static修飾的內容優先於對象存在;static修飾的成員被該類的所有對象所共享(原理本質還是因爲static修飾的成員可以通過類名訪問);直接使用類名訪問static成員,因此static修飾的成員只屬於類不屬於對象,可以直接使用類名訪問static對象。

 

static修飾屬性(類變量)

此時這個屬性可以通過"類名.屬性名"來訪問,就是說這個屬性成爲該類的類變量,被類中所有對象所共享。

類加載的過程中類本身也是保存在文件中的(字節碼文件保存着類的信息),java會通過I/O流把類的文件讀入JVM,這個過程稱爲類的加載。JVM會通過類路徑(CLASSPATH)來找字節碼文件。需要的時候纔會進行類加載,生成對象時是先加載後構造。類變量會在加載時自動初始化,初始化規則和實例變量相同。

注意:類中的實例變量是在創建對象時被初始化的。static修飾的屬性是在類加載時被創建並進行初始化,類加載的過程只進行一次,也就是類變量只會被創建一次。

 

static修飾方法(靜態方法)

static修飾的方法會使這個方法成爲整個類所公有的方法,可以使用"類名.屬性名"來訪問。

static修飾的方法不能直接訪問本類中的非靜態成員,但本類的非靜態方法可以訪問本類的靜態成員。

在靜態方法中不能出現this關鍵字。

父類中是靜態方法的子類中不能覆寫成非靜態方法,在符合覆蓋規則的前提下,在父子類中,父類中的靜態方法可以被子類中的靜態方法覆蓋,但是沒有多態。

java中main方法必須寫成static的原因:在類加載時無法創建對象,而靜態方法可以不通過對象調用,所以在類加載時就可以通過main方法入口來運行程序。

 

static修飾初始代碼塊(靜態初始代碼塊)

被static修飾的初始代碼塊就被叫做靜態初始化代碼塊,這個代碼塊只在類加載時被執行一次。可以用靜態初始化代碼塊初始化一個類。動態初始化代碼塊,寫在類體重的"{ }",這個代碼塊是在生成對象時運行,這種代碼塊叫做動態初始化代碼塊。

 

 

final修飾符


final也是個修飾符,可以用來修飾變量、方法和類,final的意思是不可改變的。

被final修飾的變量會變成常量,一旦賦值就不能再改變了。

常量可以在初始化的時候直接賦值,也可以在構造方法裏賦值,只有這兩種賦值情況,而且不能不爲常量賦值。常量不會有默認初始值。

常量賦值後不可改變的原因是鎖定棧,使棧中的數據不可以改變。靜態常量只能在初始化時直接賦值。

被final修飾的方法不能被重寫。

被final修飾的類不能被繼承。

final類中的方法也是final類型的;final不能用來修飾構造方法;使用final關鍵字修飾一個變量時,是指引用變量不能變,引用變量所指向的對象中的內容還是可以改變的。

 

final,finally,finalize的區別

final:用於聲明屬性,方法和類,分別表示屬性不可變,方法不可重寫,類不可被繼承。內部類要訪問局部變量,局部變量必須定義成final類型。

finally:是異常處理語句結構的一部分,是異常的統一出口,表示總是執行。

finalize:是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。JVM不保證此方法總被調用。

 

 

abstract修飾符


父類是將子類所共同擁有的屬性和方法抽取出來,這些屬性和方法中有的已經實現了,有的暫時還無法確定內容,那麼我們就可以先把無法確定的內容(方法)定義爲抽象的,在之後需要爲它(抽象方法)確定內容的時候具體化內容,因此抽象這個概念就出現了。abstract修飾符表示抽象的,可以修飾類和方法。被abstract修飾的類和方法分別叫做抽象類抽象方法

抽象方法沒有具體的方法體,它的作用就是等着子類繼承後覆寫,具體化內容。

抽象類是爲了把子類所共有的但還沒有具體內容的東西抽取出來,爲了以後的使用定義成抽象的方法。擁有抽象方法的類一定是抽象類,但是抽象類中並不全是抽象方法,也可以擁有普通的方法。

 

抽象類

1.擁有抽象方法的類就是抽象類,抽象類用abstract關鍵字修飾;

2.抽象類不能被實例化,需要依靠子類採用向上轉型的方式處理,必須被繼承才能被使用。抽象類是用來創建繼承動作中子類的模板,用來抽取子類中的通用特性的。抽象類必須擁有子類,使用extends繼承,一個子類只能繼承一個抽象類;

3.抽象類可以有構造函數,被繼承時子類必須繼承父類一個構造方法,抽象方法不能被聲明爲靜態;

4.抽象類可以是外部類或者內部類,抽象外部類的抽象方法必須爲public或者protected(因爲如果是private,則不能被子類繼承,子類便無法實現該方法),缺省情況下默認爲public;

5.子類(非抽象類)則必須覆寫抽象類中的全部抽象方法,如果子類沒有實現父類的抽象方法,則必須將子類也定義爲abstract類(也是個抽象類(`・ω・´))。

 

抽象方法

在Java中用abstract修飾的方法就是抽象方法;

抽象方法只能在抽象類中聲明不能在普通類中聲明;

抽象方法只需要聲明不需要實現,沒有具體的方法體;

子類繼承抽象類必須實現抽象類中的抽象方法。


 

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