05-03-設計模式 裝飾模式
Java程式設計思想讀書筆記(三)
現在是2022年五月二十八日23:14分,今天讀書筆記開始了,
今天咱們開啟第三章了,第三章控制程式流程。
“就像任何有感知的生物一樣,程式必須能操縱自己的世界,在執行過程中做出判斷和選擇。”這句話摘自本書,我覺得很經典。
這一章是入門java的基礎,控制流程非常的重要,程式是否能夠正常的執行,與這個也密切相關。
第一節 使用Java運算子
Java運算子 ,運算子是以一個或多個自變數為基礎,可生成一個新值。
運算子
賦值和算術運算子
賦值運算子=
是最常用的運算子,其實就是將我們等號右邊的結果,傳遞給等號左邊的變數,例如:
int a = 10; int b = 1 + 8; int c = 5 * 5;
算術運算子也就是我們在小學階段學習的+
-
*
/
%
,分別代表加減乘除還有取餘,例如:
int a = 2;
int b = 3;
int c = a * b;
//結果為6
需要注意的是,+
還可以用作字串連線符使用:
System.out.println("lbw" + "nb"); //lbwnb
當然,字串可以直接連線其他型別,但是會全部當做字串處理:
int a = 7, b = 15;
System.out.println("lbw" + a + b); //lbw715
算術運算子還包括++
和--
也就是自增和自減,以自增為例:
int a = 10; a++; System.out.println(a); //輸出為11
自增自減運算子放在變數的前後的返回值是有區別的:
int a = 10;
System.out.println(a++); //10 (先返回值,再自增)
System.out.println(a); //11
int a = 10;
System.out.println(++a); //11 (先自增,再返回值)
System.out.println(a); //11
int a = 10;
int b = 2;
System.out.println(b+++a++); //猜猜看結果是多少
為了使得程式碼更簡潔,你還可以使用擴充套件的賦值運算子,包括+=
、-=
、/=
、*=
、%=
,和自增自減類似,先執行運算,再返回結果,同時自身改變:
int a = 10;
System.out.println(a += 2); //等價於 a = a + 2
關係運算符
關係運算符的結果只能是布林型別,也就是要麼為真要麼為假,關係運算符包括:
> < == //大於小於等於
>= <= != //大於等於,小於等於,不等於
關係運算符一般只用於基本型別的比較,運算結果只能是boolean:
int a = 10;
int b = 2;
boolean x = a > b;
System.out.println(x);
//結果為 true
邏輯運算子
邏輯運算子兩邊只能是boolean型別或是關係/邏輯運算表示式,返回值只能是boolean型別!邏輯運算子包括:
&& //與運算,要求兩邊同時為true才能返回true
|| //或運算,要求兩邊至少要有一個為true才能返回true
! //非運算,一般放在表示式最前面,表示式用括號擴起來,表示對錶達式的結果進行反轉
實際案例來看看:
int a = 10;
int b = 2;
boolean x = a > b && a < b; //怎麼可能同時滿足呢
System.out.println(x); //false
int a = 10;
int b = 2;
boolean x = a > b || a <= b; //一定有一個滿足!
System.out.println(x); //true
int a = 10;
int b = 2;
boolean x = !(a > b); //對結果進行反轉,本來應該是true
System.out.println(x); //false
位運算子
& //按位與,注意,返回的是運算後的同類型值,不是boolean!
| //按位或
^ //按位異或 0 ^ 0 = 0
~ //按位非
按位運算實際上是根據值的二進位制編碼來計算結果,例如按位與,以4bit為例:
0101 & 0100 = 0100 (只有同時為1對應位才得1)
int a = 7, b = 15;
System.out.println(a & b); //結果為7
三目運算子
三目運算子其實是為了簡化程式碼而生,可以根據條件是否滿足來決定返回值,格式如下:
int a = 7, b = 15;
String str = a > b ? "行" : "不行"; // 判斷條件(只能是boolean,或返回boolean的表示式) ? 滿足的返回值 : 不滿足的返回值
System.out.println("漢堡做的行不行?"+str); //漢堡做的行不行?不行
理解三目運算子,就很容易理解後面的if-else語句了。
第二節 執行控制
Java使用的c全部的控制語句,和c或者c++基本上是共通的,但是不支援goto這種有害的操作。
選擇結構
選擇結構包含if和switch型別,選擇結構能夠幫助我們根據條件判斷,再執行哪一塊程式碼。
if語句
就像上面所說,判斷使用者輸入的數字,大於1則輸出ok,小於1則輸出no,要實現這種效果,我們首先可以採用if語句:
if(判斷條件){
//判斷成功執行的內容
}else{
//判斷失敗執行的內容
}
//if的內容執行完成後,後面的內容正常執行
其中,else
語句不是必須的。
現在,又來了一個新的需求,使用者輸入的是1列印ok,輸入2,列印yes,其他列印no,那麼這樣就需要我們進行多種條件的判斷了,當然if能進行多分支判斷:
if(判斷條件1){
//判斷成功執行的內容
}else if(判斷條件2){
//再次判斷,如果判斷成功執行的內容
}else{
//上面的都沒成功,只能走這裡
}
同樣,else
語句不是必須的。
現在,又來了一個新的需求,使用者輸入1之後,在判斷使用者下一次輸入的是什麼,如果是1,列印yes,不是就列印no,這樣就可以用巢狀if了:
if(判斷條件1){
//前提是判斷條件1要成功才能進來!
if(判斷條件2){
//判斷成功執行的內容
}else{
//判斷失敗執行的內容
}
}
switch語句
我們不難發現,雖然else-if
能解決多分支判斷的問題,但是效率實在是太低了,多分支if採用的是逐級向下判斷,顯然費時費力,那麼有沒有一直更專業的解決多分支判斷問題的東西呢?
switch(判斷主體){
case 值1:
//執行xxx
break; //break用於跳出switch語句,不新增會導致程式繼續向下執行!
case 值2:
//執行xxx
break;
case 值3:
//執行xxx
break;
}
在上述語句中,只有判斷主體等於case後面的值時,才會執行case中的語句,同時需要使用break來跳出switch語句,否則會繼續向下執行!
為什麼switch效率更高呢,因為switch採用二分思想進行查詢(這也是為什麼switch只能判斷值相等的原因),能夠更快地找到我們想要的結果!
迴圈結構
小明想向小紅表白,於是他在螢幕上列印了520個 "我愛你",我們用Java該如何實現呢?
for語句
for語句是比較靈活的迴圈控制語句,一個for語句的定義如下:
for(初始條件;迴圈條件;更新){
//迴圈執行的內容
}
//迴圈結束後,繼續執行
- 初始條件:迴圈開始時的條件,一般用於定義控制迴圈的變數。
- 迴圈條件:每輪迴圈開始之前,進行一次判斷,如果滿足則繼續,不滿足則結束,要求為boolean變數或是boolean表示式。
- 更新:每輪迴圈結束後都會執行的內容,一般寫增量表達式。
初始條件、迴圈條件、更新條件不是缺一不可,甚至可以都缺!
for(int i = 0;i < 520;i++){
System.out.println("我愛你");
}
for(;;){
//這裡的內容將會永遠地進行下去!
}
增強for迴圈在陣列時再講解!
while迴圈
while迴圈和for迴圈類似,但是它更加的簡單,只需要新增維持迴圈的判斷條件即可!
while(迴圈條件){
//迴圈執行的內容
}
和for一樣,每次迴圈開始,當迴圈條件不滿足時,自動退出!那麼有時候我們希望先執行了我們的程式碼再去判斷怎麼辦呢,我們可以使用do-while語句:
do{
//執行內容
}while(迴圈條件);
一定會先執行do裡面的內容,再做判斷!
ok,今天記錄到此結束,現在是2022年五月29日12點11分,晚安!