小閆陪你入門 Java (三)
- 2019 年 10 月 6 日
- 筆記
"
First say to yourself what you would be; and then do what you have to do.
—— Epictetus
首先,對自己說想要成為什麼樣的人;然後做一切必須做的。
"
7.Java 運算符
7.1算術運算符
加減乘除與 Python 中一致,分別為 +-*/。取余為 %。不同的有以下兩種,分別為自增和自減。
自增為 ++,自減為 --。即一個數字加1或者減1。
public class HelloDemo { public static void main(String[] args) { // 運算符 int i1 = 10; int i2 = 22; int i3 = 25; int i4 = 66; System.out.println("i1 + i2 = " + (i1 + i2)); System.out.println("i3 - i2 = " + (i3 - i2)); System.out.println("i4 * i1 = " + (i4 - i1)); System.out.println("i2 / i1 = " + (i2 / i1)); // 自增自減 ++i1; System.out.println(i1); --i1; System.out.println(i1); } }詳解自增/自減:
int b = ++a;
上述過程其實為兩步,第一步為加 1 後重新賦值,第二步為將新值 a 賦值給 b。
int b = a++
此過程與之前不同,它是先將 a 賦值給 b,然後 a 自增操作。
自減同理
7.2 關係運算符
關係運算符即比較兩個數值之間的關係,如大小等。與 Python 中相同的為 == 表示相等; != 表示不相等; > 表示大於; < 表示小於; >= 表示大於等於; <= 表示小於等於。
public class HelloDemo { public static void main(String[] args) { int s = 10; int n = 20; System.out.println("s == n = " + (s == n) ); System.out.println("s != n = " + (s != n) ); System.out.println("s > n = " + (s > n) ); System.out.println("s < n = " + (s < n) ); System.out.println("n >= s = " + (n >= s) ); System.out.println("n <= s = " + (n <= s) ); } }7.3 位運算符
位運算符即將十進位等數字轉換為二進位數字後,對每一個位置上字元進行操作。如下示例,大家可以理解一下:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011
操作符 | 描述 |
|---|---|
& | 如果相對應位都是1,則結果為1,否則為0 |
| | 如果相對應位都是 0,則結果為 0,否則為 1 |
^ | 如果相對應位值相同,則結果為0,否則為1 |
〜 | 按位取反運算符翻轉操作數的每一位,即0變成1,1變成0。 |
<< | 按位左移運算符。左操作數按位左移右操作數指定的位數。 |
>> | 按位右移運算符。左操作數按位右移右操作數指定的位數。 |
>>> | 按位右移補零操作符。左操作數的值按右操作數指定的位數右移,移動得到的空位以零填充。 |
7.4 邏輯運算符
邏輯運算符即與或非關係。與 Python 不同, && 表示與關係; || 表示或關係; ! 表示非關係。
7.5 賦值運算符
下面列出 Java 中的賦值運算符:
操作符 | 描述 |
|---|---|
= | 簡單的賦值運算符,將右操作數的值賦給左側操作數 |
+ = | 加和賦值操作符,它把左操作數和右操作數相加賦值給左操作數 |
- = | 減和賦值操作符,它把左操作數和右操作數相減賦值給左操作數 |
* = | 乘和賦值操作符,它把左操作數和右操作數相乘賦值給左操作數 |
/ = | 除和賦值操作符,它把左操作數和右操作數相除賦值給左操作數 |
(%)= | 取模和賦值操作符,它把左操作數和右操作數取模後賦值給左操作數 |
<< = | 左移位賦值運算符 |
>> = | 右移位賦值運算符 |
&= | 按位與賦值運算符 |
^ = | 按位異或賦值操作符 |
| = | 按位或賦值操作符 |
7.6 三元運算符
Java 中三元運算符與 Python 中大不一樣,其表示為:
類型 變數 = 表達式 ? 如果條件為真時的操作 : 條件為假時的操作
關鍵在於符號 ?:
7.7 instanceof 運算符
它是用來判斷某個變數是否為某類型或者某個對象是否為某類或者介面的一個對象。如果是為真。例如:
String name = "Ethan"; boolean result = name instanceof String; class Vehicle {} public class Car extends Vehicle { public static void main(String[] args){ Vehicle a = new Car(); boolean result = a instanceof Car; System.out.println( result); } }7.8 運算符優先順序
運算符優先順序是如果程式碼中包含多種運算符,那麼優先執行誰的問題。其如數學,有括弧先括弧(小括弧優先於中括弧),乘除優先於加減等等。
下面附網上一個表格,具有最高優先順序的運算符在表的最上面,最低優先順序的在表的底部,以供大家忘記時進行查看:
類別 | 操作符 | 關聯性 |
|---|---|---|
後綴 | () [] . (點操作符) | 左到右 |
一元 | + + - !〜 | 從右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
關係 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位與 | & | 左到右 |
按位異或 | ^ | 左到右 |
按位或 | | | 左到右 |
邏輯與 | && | 左到右 |
邏輯或 | | | | 左到右 |
條件 | ?: | 從右到左 |
賦值 | = + = - = * = / =%= >> = << =&= ^ = | = | 從右到左 |
逗號 | , | 左到右 |
8.循環
循環即將相同的邏輯多次執行。與 Python 相同,它也有 while 循環和 for 循環,但是其比 Python 多了一種 do...while 循環。下面即詳細看看。
8.1 while 循環
先來看其基本語法,即布爾表達式為 True 時循環一直執行。
while( 布爾表達式 ) { // 循環執行邏輯 }示例如下:
public class Test { public static void main(String args[]) { // while 循環 int int1 = 10; while (int1 > 0) { System.out.println(int1); int1--; } } }8.2 for 循環
for 循環如同 Python 中的 for 循環一樣,生來就是簡化程式碼操作的。
for(初始化; 布爾表達式; 更新) { // 程式碼語句 }大家看到上述語法也許有些懵逼,我們類比 Python 中的 for 循環進行解讀。Python 中:
for i in range(3): print(i)
要想達到同樣的效果,Java 中程式碼如下:
public class Test{ public static void main(String args[]) { // for 循環 for (int x = 0; x < 3; x = x + 1){ System.out.println(x); } } }即在 for 後的括弧中,先填寫一個控制循環的變數,再填寫一個判斷條件,最後更新變數值已達到控制循環的目的。
從上述程式碼可以看出 Java 確實程式碼量比 Python 多一點。
增強 for 循環:
大家想起 Python 中有如下操作:
namelist = ['Ethan', 'yan', 'liang'] for name in list: print(name, end=",")
可以循環遍歷姓名列表並且列印輸出,那麼 Java 中呢?Java 從 Java5 的時候引入了一種方式,稱為增強操作,寫為如下:
public class Test { public static void main(String args[]){ // 增強for循環 String [] namelist = {"Ethan", "yan", "liang"}; for (String name: namelist) { System.out.print(name); System.out.print(","); } } }注意:其中列表並不是中括弧,而是大括弧。 print() 函數列印輸出後不會執行換行操作。
8.3 do... while 循環
此循環與 while 循環類似,不同點在於 do...while 循環至少執行一次。(如判斷條件不滿足,while 循環不會執行,但是 do...while 循環會執行一次)先來看起語法:
do { // 程式碼語句 }while( 布爾表達式 )其實從程式碼中即可分析出原因,因為程式碼塊先執行,條件表達式後執行。
public class Test { public static void main(String args[]) { int a = 10; do { System.out.println(a); a--; }while (a<0); } }上例中 while 的判斷條件不滿足,如果是 while 循環的話則不會執行;而上述例子大家可以進行驗證,會返回 10。
8.4 終止循環
與 Python 中相同,Java 中也有兩個關鍵字用來終止循環,一個為 break,一個為 continue。
break:終止當前循環。
continue:終止本次循環。(比如循環輸出1到10,在7的時候遇到了語句 continue,那麼7不會輸出,而8、9等正常輸出)
9.條件語句
9.1 if
我們來看一下最簡單的 if 語句如何書寫:
if( 布爾表達式 ) { // 布爾表達式為true時執行的語句 }示例如下:
public class Test{ public static void main(String args[]){ // if int i = 1; if(i==1){ System.out.println("值為1"); } } }Java 中字元串用雙引號包裹。
9.2 if...else
語法為:
if(布爾表達式){ //如果布爾表達式的值為true }else{ //如果布爾表達式的值為false }過於簡單,不再示例。
9.3 if...else if...else
此為多條件判斷情況,語法如下:
if(布爾表達式 1){ //如果布爾表達式 1的值為true執行程式碼 }else if(布爾表達式 2){ //如果布爾表達式 2的值為true執行程式碼 }else if(布爾表達式 3){ //如果布爾表達式 3的值為true執行程式碼 }else { //如果以上布爾表達式都不為true執行程式碼 }類比於 Python 中的語法:
if 條件1: 條件為真時執行 elif 條件2: 條件為真時執行 else: 條件都不滿足時執行
其實 elif 就是 elseif 的縮寫。
當然,Java 中的條件語句也支援嵌套操作。