Java基礎系列--02_運算符和程序的語句
運算符:
(1)算術運算符:
+,-,*,/,%,++,--(加、減、乘、除、取余、自增,自減)
++和--的註意事項:
a:他們的作用是自增或者自減
b:使用
1.單獨使用
放在操作數據的前面和後面效果一樣。
a++或者++a效果一樣。
2.參與操作使用
放在操作數的前面:先自增或者自減,再參與操作
放在操作數的後面:先參與操作,再自增或者自減
1 int a = 10;
2 int b = ++a; //b=11,a=11
3 int a = 10;
4 int b = a++; //b=10,a=11
(2)賦值運算符
A:=,+=,-=,*=,/=,%=(等於,加等於,減等於,乘等於,除等於,取摸等於)
B:=叫做賦值運算符,也是最基本的賦值運算符
舉例:int x = 10; 把10賦值給int類型的變量x。
C:擴展的賦值運算符的特點
隱含了自動強制轉換。
舉例代碼:
1 short s = 1;//聲明變量s,並將常量1賦值給變量s
2 s = s + 1; // Type mismatch: cannot convert from int to short short ss = 1;
3 short ss += 1; //ss變量加上常量值1
4 /*s = s + 1; s轉換為int型,在參與運算,得到的結果仍然是int型,
5 *而ss是short型無法將int轉換為short,所以報錯。
6 */
(3)比較運算符
A:==,!=,>,>=,<,<=
B:無論運算符兩端簡單還是復雜最終結果是boolean類型。
C:千萬不要把==寫成了=(==表示比較,=是賦值)
(4)邏輯運算符
A:常用的:!,&&,|| 不常用:&,|,^,
B:邏輯運算符用於連接boolean類型的式子,得到的結果也是boolean類型
C:結論
!:非true則false,非false則true
&&:結果和&是一樣的,都表示與運算,只不過有短路效果,即判斷左邊的表達式可以確定整個表達式的值,就不再運算其他部分表達式,而&要運算全部的表達式。
舉例:(1 !=1 && a > b)左邊是false,右邊不執行。
||:結果和|是一樣的,只不過有短路效果。左邊是true,右邊不執行。
&:有false則false
|:有true則true
^:相同則false,不同則true。(異或)
(5)位運算符
^的特殊用法
一個數據針對另一個數據位異或兩次,該數不變
舉例:
1.實現兩個變量的交換:
A:采用第三方變量
B:用位異或運算符
1 /*實現兩個變量的交換*/ 2 //方式一:采用第三方變量 3 //方式二:巧用位異或運算符 4 int a=0; //0000 5 int b=10; //1010 6 //方式一: 7 int temp = 0; 8 temp = a; 9 a = b; 10 b = temp; 11 //方式二: 12 a = a^b; //a=1010->10 使用異或操作符不僅節省了代碼量,還可以讓程序更加快速,更加專業,因為異或的底層是二進制的運算
2.最有效率的方式計算出256乘以8和256除以16的結果
256<<3 = 2048(二進制碼右移3位補0),256>>4 = 16(二進制碼左移4位補0)
<<,>>是移位操作符,一個是右移,一個是左移。每向右移動一位都相當於是乘2,每向左移動一位都相當於是除2
(6)三元運算符
A:格式
比較表達式?表達式1:表達式2;
B:執行流程:
首先計算比較表達式的值,看是true還是false。
如果是true,表達式1就是結果。
如果是false,表達式2就是結果。
舉例:c = a>b?a:b; //如果 a > b ,則 c = a;否則 c = b;
(7)運算符的優先級
優先級 描述 運算符
1 括號 ()、[]
2 正負號 +、-
3 自增自減,非 ++、--、!
4 乘,除,取余 *、/、%
5 加、減 +、-
6 移位運算 <<、>>
7 大小關系 >、>=、<、<=
8 相等關系 ==、!=
9 按位與 &
10 按位異或 ^
11 按位或 |
12 邏輯與 &&
13 邏輯或 ||
14 條件運算 ? :
15 賦值運算 =、+=、-=、*=、/=、%=
16 位賦值運算 &=、|=、<<=、>>=、>>>=
備註:如果在程序中,要改變運算順序,可以使用()。在一些比較復雜的運算中,使用括號,能夠提高程序的可讀性。
2:鍵盤錄入(後面再詳細解釋)
(1)目的從鍵盤上靈活的錄入我們的數據。
使用步驟:A:導包
import java.util.Scanner;
位置:在默認包名的下方,class的上方
B:創建對象
Scanner sc = new Scanner(System.in);
C:獲取數據
int x = sc.nextInt();
3:流程控制語句
(1)順序結構 從上往下,依次執行
(2)選擇結構 按照不同的選擇,執行不同的代碼
(3)循環結構 做一些重復的代碼
4:if語句
(1)三種格式
A:格式1
if(比較表達式) {
語句體;
}
執行流程:
判斷比較表達式的值,看是true還是false
如果是true,就執行語句體
如果是false,就不執行語句體
B:格式2
if(比較表達式) {
語句體1;
}else {
語句體2;
}
執行流程:
判斷比較表達式的值,看是true還是false
如果是true,就執行語句體1
如果是false,就執行語句體2
C:格式3
if(比較表達式1) {
語句體1;
}else if(比較表達式2){
語句體2;
}
... //這裏表示可以嵌套多個else if語句
else {
語句體n+1;
}
執行流程:
判斷比較表達式1的值,看是true還是false
如果是true,就執行語句體1
如果是false,就繼續判斷比較表達式2的值,看是true還是false
如果是true,就執行語句體2
如果是false,就繼續判斷比較表達式3的值,看是true還是false
...
如果都不滿足,就執行語句體n+1
(2)註意事項
A:比較表達式無論簡單還是復雜,結果是boolean類型
B:if語句控制的語句體如果是一條語句,是可以省略大括號的;如果是多條,不能省略。
建議:一般不要省略。
C:一般來說,有左大括號,就沒有分號,有分號,就沒有左大括號(成對出現)。
D:else後面如果沒有if,是不會出現比較表達式的。
E:三種if語句其實都是一個語句,只要有一個執行,其他的就不再執行。
(3)三元運算符和if語句第二種格式的關系
所有的三元運算符能夠實現的,if語句的第二種格式都能實現。
if (a > b ){ c = a; }else{ c = b; } //等價的三元表達式 c = a>b?a:b; //如果 a > b ,則 c = a;否則 c = b;
5.switch語句
(1)格式:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
break;
}
格式解釋說明:
switch:說明這是switch語句。
表達式:可以是byte,short,int,char(都可以強轉為int)
JDK5以後可以是枚舉
JDK7以後可以是字符串
case:後面的值就是要和表達式進行比較的值
break:表示程序到這裏中斷,跳出switch語句
default:如果所有的情況都不匹配,就執行這裏,相當於if語句中的else
(2)應註意的問題
switch語句的表達式可以是byte,不可以是long,JDK7之後可以是String。
(3)執行流程:
A:首先計算表達式的值
B:和每一個case進行匹配,如果有就執行對應的語句體,執行到break就結束。
C:如果沒有匹配,就執行default的語句體n+1。
(4)註意事項:
A:case後面只能是常量,不能是變量,而且,多個case後面的值不能出現相同的
B:default可以省略,但是不建議,因為它的作用是對不正確的情況給出提示。
特殊情況:
執行到switch語句之前,case就可以把值確定。
C:break可以省略,但是如果break省略了,程序就不會跳出switch,會按照原來的順序繼續執行,直到跳出。這個現象叫做case穿透。
D:default的位置不一定要在最後,但是它一定是在最後執行。
E:switch語句的結束條件
a:遇到break就結束了
b:執行到末尾就結束了
(5)if語句和switch語句各自的場景
A:if
針對boolean類型的判斷
針對一個範圍的判斷
針對幾個常量的判斷
B:switch
針對幾個常量的判斷
6.循環語句
(1)有三種:for,while,do...while,foreach(增強for)
(2)for循環語句
A:格式
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
A.執行流程:
a:執行初始化語句
b:執行判斷條件語句
如果這裏是true,就繼續
如果這裏是false,循環就結束
c:執行循環體語句
d:執行控制條件語句
e:回到b
B.註意事項
a:判斷條件語句無論簡單還是復雜,結果是boolean類型
b:循環體語句如果是一條,可以省略大括號,但是不建議
c:有分號就沒有左大括號,有左大括號就沒有分號
(3)while循環
A:基本格式
while(判斷條件語句) {
循環體語句;
}
擴展格式:
初始化語句;
while(判斷條件語句){
循環體語句;
控制條件語句;
}
通過查看這個格式,說明while循環可以和for循環等價轉換。
B:for和while的區別
a:使用上的區別
for語句的控制條件變量,在循環結束後不能在使用(作用域)。
而while的可以繼續使用。
b:理解上的區別
for適合於一個範圍的判斷
while適合次數不明確的
(4)do...while循環
A:基本格式
do {
循環體語句;
}while(判斷條件語句);
擴展格式:
初始化語句;
do {
循環體語句;
控制條件語句;
}while(判斷條件語句);
通過查看格式,說明三種循環的格式可以相互替換的。
B:三種循環的區別
a:do...while循環至少執行一次循環體
b:for和while必須先判斷條件是否是true,然後後才能決定是否執行循環體
(5)foreach循環(其實叫做:增強for)
格式:for (int[] arr : array) {
//遍歷數組
}
註意:Java中沒有foreach循環,foreach循環其他的語言中的名稱,但是Java中的增強for的本質是跟foreach循環一樣的,這個循環一般是用來實現遍歷操作。
(6)循環使用的註意事項(死循環)
A:一定要註意修改控制條件,否則容易出現死循環。
B:最簡單的死循環格式
a:while( true ) { ... }
b:for( ; ; ) { ... }
7.控制跳轉語句
(1)break:中斷的意思
A:用在循環和switch語句中,離開此應用場景無意義。
B:作用
a:跳出單層循環
b:跳出多層循環,需要標簽語句的配合
(2)continue:繼續
A:用在循環中,離開此應用場景無意義。
B:作用
a:跳出單層循環的一次,可以繼續下一次
//控制臺輸出7次:Hello Java
1 for(int x=1; x <= 10; x++) { 2 if(x%3 == 0) { 3 continue; 4 } 5 System.out.println("Hello Java"); 6 }
(3)return:返回
A:用於結束方法的,並返回某個值。
B:一旦遇到return,程序就不會在繼續往後執行。
Java基礎系列--02_運算符和程序的語句