Java基礎(chǔ)語法(運算符&循環(huán))
1 類型轉(zhuǎn)換
在Java中,一些數(shù)據(jù)類型之間是可以相互轉(zhuǎn)換的。分為兩種情況:自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。
1.1 隱式轉(zhuǎn)換(理解)
? 把一個表示數(shù)據(jù)范圍小的數(shù)值或者變量賦值給另一個表示數(shù)據(jù)范圍大的變量。這種轉(zhuǎn)換方式是自動的,直接書寫即可。例如:
double num = 10; // 將int類型的10直接賦值給double類型
System.out.println(num); // 輸出10.0
說明:
- 整數(shù)默認(rèn)是int類型,byte、short和char類型數(shù)據(jù)參與運算均會自動轉(zhuǎn)換為int類型。
byte b1 = 10;
byte b2 = 20;
byte b3 = b1 + b2;
// 第三行代碼會報錯,b1和b2會自動轉(zhuǎn)換為int類型,計算結(jié)果為int,int賦值給byte需要強制類型轉(zhuǎn)換。
// 修改為:
int num = b1 + b2;
// 或者:
byte b3 = (byte) (b1 + b2);
- boolean類型不能與其他基本數(shù)據(jù)類型相互轉(zhuǎn)換。
1.2 強制轉(zhuǎn)換(理解)
? 把一個表示數(shù)據(jù)范圍大的數(shù)值或者變量賦值給另一個表示數(shù)據(jù)范圍小的變量。
? 強制類型轉(zhuǎn)換格式:目標(biāo)數(shù)據(jù)類型 變量名 = (目標(biāo)數(shù)據(jù)類型)值或者變量;
? 例如:
double num1 = 5.5;
int num2 = (int) num1; // 將double類型的num1強制轉(zhuǎn)換為int類型
System.out.println(num2); // 輸出5(小數(shù)位直接舍棄)
1.3 類型轉(zhuǎn)換案例(理解)
案例代碼:
byte a = 3;
byte b = 4;
byte c = a + b; //錯誤。因為兩個byte變量相加,會先提升為int類型
byte d = 3 + 4; //正確。常量優(yōu)化機(jī)制
常量優(yōu)化機(jī)制:
? 在編譯時,整數(shù)常量的計算會直接算出結(jié)果,并且會自動判斷該結(jié)果是否在byte取值范圍內(nèi),
? 在:編譯通過
不在:編譯失敗
2. 運算符
2.1 算術(shù)運算符
2.1.1 運算符和表達(dá)式(了解)
運算符:對常量或者變量進(jìn)行操作的符號
表達(dá)式:用運算符把常量或者變量連接起來符合java語法的式子就可以稱為表達(dá)式。
? 不同運算符連接的表達(dá)式體現(xiàn)的是不同類型的表達(dá)式。
舉例說明:
int a = 10;
int b = 20;
int c = a + b;
+:是運算符,并且是算術(shù)運算符。
a + b:是表達(dá)式,由于+是算術(shù)運算符,所以這個表達(dá)式叫算術(shù)表達(dá)式。
2.1.2 算術(shù)運算符(應(yīng)用)
符號 | 作用 | 說明 |
---|---|---|
+ | 加 | 參看小學(xué)一年級 |
- | 減 | 參看小學(xué)一年級 |
* | 乘 | 參看小學(xué)二年級,與“×”相同 |
/ | 除 | 參看小學(xué)二年級,與“÷”相同 |
% | 取余 | 獲取的是兩個數(shù)據(jù)做除法的余數(shù) |
注意:
-
/和%的區(qū)別:兩個數(shù)據(jù)做除法,/取結(jié)果的商,%取結(jié)果的余數(shù)。
-
整數(shù)操作只能得到整數(shù),要想得到小數(shù),必須有浮點數(shù)參與運算。
int a = 10;
int b = 3;
System.out.println(a / b); // 輸出結(jié)果3
System.out.println(a % b); // 輸出結(jié)果1
2.1.3 字符的“+”操作(理解)
char類型參與算術(shù)運算,使用的是計算機(jī)底層對應(yīng)的十進(jìn)制數(shù)值。需要我們記住三個字符對應(yīng)的數(shù)值:
‘a(chǎn)’ – 97 a-z是連續(xù)的,所以’b’對應(yīng)的數(shù)值是98,'c’是99,依次遞加
‘A’ – 65 A-Z是連續(xù)的,所以’B’對應(yīng)的數(shù)值是66,'C’是67,依次遞加
‘0’ – 48 0-9是連續(xù)的,所以’1’對應(yīng)的數(shù)值是49,'2’是50,依次遞加
// 可以通過使用字符與整數(shù)做算術(shù)運算,得出字符對應(yīng)的數(shù)值是多少
char ch1 = 'a';
System.out.println(ch1 + 1); // 輸出98,97 + 1 = 98
char ch2 = 'A';
System.out.println(ch2 + 1); // 輸出66,65 + 1 = 66
char ch3 = '0';
System.out.println(ch3 + 1); // 輸出49,48 + 1 = 49
算術(shù)表達(dá)式中包含不同的基本數(shù)據(jù)類型的值的時候,整個算術(shù)表達(dá)式的類型會自動進(jìn)行提升。
提升規(guī)則:
byte類型,short類型和char類型將被提升到int類型,不管是否有其他類型參與運算。
整個表達(dá)式的類型自動提升到與表達(dá)式中最高等級的操作數(shù)相同的類型
? 等級順序:byte,short,char --> int --> long --> float --> double
例如:
byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 該行報錯,因為byte類型參與算術(shù)運算會自動提示為int,int賦值給byte可能損失精度
int i3 = b1 + b2; // 應(yīng)該使用int接收
byte b3 = (byte) (b1 + b2); // 或者將結(jié)果強制轉(zhuǎn)換為byte類型
-------------------------------
int num1 = 10;
double num2 = 20.0;
double num3 = num1 + num2; // 使用double接收,因為num1會自動提升為double類型
2.1.4 字符串的“+”操作(理解)
當(dāng)“+”操作中出現(xiàn)字符串時,這個”+”是字符串連接符,而不是算術(shù)運算。
System.out.println("itheima"+ 666); // 輸出:itheima666
在”+”操作中,如果出現(xiàn)了字符串,就是連接運算符,否則就是算術(shù)運算。當(dāng)連續(xù)進(jìn)行“+”操作時,從左到右逐個執(zhí)行。
System.out.println(1 + 99 + "年黑馬"); // 輸出:100年黑馬
System.out.println(1 + 2 + "itheima" + 3 + 4); // 輸出:3itheima34
// 可以使用小括號改變運算的優(yōu)先級
System.out.println(1 + 2 + "itheima" + (3 + 4)); // 輸出:3itheima7
2.1.5 數(shù)值拆分(應(yīng)用)
需求:
? 鍵盤錄入一個三位數(shù),將其拆分為個位,十位,百位,打印在控制臺
示例代碼:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// 1:使用Scanner鍵盤錄入一個三位數(shù)
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個三位數(shù)");
int num = sc.nextInt();
// 2:個位的計算:數(shù)值 % 10
int ge = num % 10;
// 3:十位的計算:數(shù)值 / 10 % 10
int shi = num / 10 % 10;
// 4:百位的計算:數(shù)值 / 100
int bai = num / 100;
// 5:將個位, 十位, 百位拼接上正確的字符串, 打印即可
System.out.println("整數(shù)"+num+"個位為:" + ge);
System.out.println("整數(shù)"+num+"十位為:" + shi);
System.out.println("整數(shù)"+num+"百位為:" + bai);
}
}
2.2 自增自減運算符(理解)
符號 | 作用 | 說明 |
---|---|---|
++ | 自增 | 變量的值加1 |
– | 自減 | 變量的值減1 |
注意事項:
? ++和-- 既可以放在變量的后邊,也可以放在變量的前邊。
? 單獨使用的時候, ++和-- 無論是放在變量的前邊還是后邊,結(jié)果是一樣的。
? 參與操作的時候,如果放在變量的后邊,先拿變量參與操作,后拿變量做++或者–。
? 參與操作的時候,如果放在變量的前邊,先拿變量做++或者–,后拿變量參與操作。
? 最常見的用法:單獨使用。
int i = 10;
i++; // 單獨使用
System.out.println("i:" + i); // i:11
int j = 10;
++j; // 單獨使用
System.out.println("j:" + j); // j:11
int x = 10;
int y = x++; // 賦值運算,++在后邊,所以是使用x原來的值賦值給y,x本身自增1
System.out.println("x:" + x + ", y:" + y); // x:11,y:10
int m = 10;
int n = ++m; // 賦值運算,++在前邊,所以是使用m自增后的值賦值給n,m本身自增1
System.out.println("m:" + m + ", m:" + m); // m:11,m:11
練習(xí):
int x = 10;
int y = x++ + x++ + x++;
System.out.println(y); // y的值是多少?
/*
解析,三個表達(dá)式都是++在后,所以每次使用的都是自增前的值,但程序自左至右執(zhí)行,所以第一次自增時,使用的是10進(jìn)行計算,但第二次自增時,x的值已經(jīng)自增到11了,所以第二次使用的是11,然后再次自增。。。
所以整個式子應(yīng)該是:int y = 10 + 11 + 12;
輸出結(jié)果為33。
*/
注意:通過此練習(xí)深刻理解自增和自減的規(guī)律,但實際開發(fā)中強烈建議不要寫這樣的代碼!小心挨打!
2.3 賦值運算符(應(yīng)用)
賦值運算符的作用是將一個表達(dá)式的值賦給左邊,左邊必須是可修改的,不能是常量。
符號 | 作用 | 說明 |
---|---|---|
= | 賦值 | a=10,將10賦值給變量a |
+= | 加后賦值 | a+=b,將a+b的值給a |
-= | 減后賦值 | a-=b,將a-b的值給a |
*= | 乘后賦值 | a*=b,將a×b的值給a |
/= | 除后賦值 | a/=b,將a÷b的商給a |
%= | 取余后賦值 | a%=b,將a÷b的余數(shù)給a |
注意:
擴(kuò)展的賦值運算符隱含了強制類型轉(zhuǎn)換。
short s = 10;
s = s + 10; // 此行代碼報出,因為運算中s提升為int類型,運算結(jié)果int賦值給short可能損失精度
s += 10; // 此行代碼沒有問題,隱含了強制類型轉(zhuǎn)換,相當(dāng)于 s = (short) (s + 10);
2.4 關(guān)系運算符(應(yīng)用)
關(guān)系運算符有6種關(guān)系,分別為小于、小于等于、大于、等于、大于等于、不等于。
符號 | 說明 |
---|---|
== | a==b,判斷a和b的值是否相等,成立為true,不成立為false |
!= | a!=b,判斷a和b的值是否不相等,成立為true,不成立為false |
> | a>b,判斷a是否大于b,成立為true,不成立為false |
>= | a>=b,判斷a是否大于等于b,成立為true,不成立為false |
< | a<b,判斷a是否小于b,成立為true,不成立為false |
<= | a<=b,判斷a是否小于等于b,成立為true,不成立為false |
注意事項:
? 關(guān)系運算符的結(jié)果都是boolean類型,要么是true,要么是false。
? 千萬不要把“”誤寫成“=”,"“是判斷是否相等的關(guān)系,”="是賦值。
int a = 10;
int b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a >= b); // false
System.out.println(a < b); // true
System.out.println(a <= b); // true
// 關(guān)系運算的結(jié)果肯定是boolean類型,所以也可以將運算結(jié)果賦值給boolean類型的變量
boolean flag = a > b;
System.out.println(flag); // 輸出false
2.5 邏輯運算符(應(yīng)用)
邏輯運算符把各個運算的關(guān)系表達(dá)式連接起來組成一個復(fù)雜的邏輯表達(dá)式,以判斷程序中的表達(dá)式是否成立,判斷的結(jié)果是 true 或 false。
符號 | 作用 | 說明 |
---|---|---|
& | 邏輯與 | a&b,a和b都是true,結(jié)果為true,否則為false |
| | 邏輯或 | a|b,a和b都是false,結(jié)果為false,否則為true |
^ | 邏輯異或 | a^b,a和b結(jié)果不同為true,相同為false |
! | 邏輯非 | !a,結(jié)果和a的結(jié)果正好相反 |
//定義變量
int i = 10;
int j = 20;
int k = 30;
//& “與”,并且的關(guān)系,只要表達(dá)式中有一個值為false,結(jié)果即為false
System.out.println((i > j) & (i > k)); //false & false,輸出false
System.out.println((i < j) & (i > k)); //true & false,輸出false
System.out.println((i > j) & (i < k)); //false & true,輸出false
System.out.println((i < j) & (i < k)); //true & true,輸出true
System.out.println("--------");
//| “或”,或者的關(guān)系,只要表達(dá)式中有一個值為true,結(jié)果即為true
System.out.println((i > j) | (i > k)); //false | false,輸出false
System.out.println((i < j) | (i > k)); //true | false,輸出true
System.out.println((i > j) | (i < k)); //false | true,輸出true
System.out.println((i < j) | (i < k)); //true | true,輸出true
System.out.println("--------");
//^ “異或”,相同為false,不同為true
System.out.println((i > j) ^ (i > k)); //false ^ false,輸出false
System.out.println((i < j) ^ (i > k)); //true ^ false,輸出true
System.out.println((i > j) ^ (i < k)); //false ^ true,輸出true
System.out.println((i < j) ^ (i < k)); //true ^ true,輸出false
System.out.println("--------");
//! “非”,取反
System.out.println((i > j)); //false
System.out.println(!(i > j)); //!false,,輸出true
2.6 短路邏輯運算符(理解)
符號 | 作用 | 說明 |
---|---|---|
&& | 短路與 | 作用和&相同,但是有短路效果 |
|| | 短路或 | 作用和|相同,但是有短路效果 |
在邏輯與運算中,只要有一個表達(dá)式的值為false,那么結(jié)果就可以判定為false了,沒有必要將所有表達(dá)式的值都計算出來,短路與操作就有這樣的效果,可以提高效率。同理在邏輯或運算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式將不再參與運算。
-
邏輯與&,無論左邊真假,右邊都要執(zhí)行。
-
短路與&&,如果左邊為真,右邊執(zhí)行;如果左邊為假,右邊不執(zhí)行。
-
邏輯或|,無論左邊真假,右邊都要執(zhí)行。
-
短路或||,如果左邊為假,右邊執(zhí)行;如果左邊為真,右邊不執(zhí)行。
int x = 3;
int y = 4;
System.out.println((x++ > 4) & (y++ > 5)); // 兩個表達(dá)都會運算
System.out.println(x); // 4
System.out.println(y); // 5
System.out.println((x++ > 4) && (y++ > 5)); // 左邊已經(jīng)可以確定結(jié)果為false,右邊不參與運算
System.out.println(x); // 4
System.out.println(y); // 4
2.7 三元運算符(理解)
三元運算符語法格式:
關(guān)系表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2;
解釋:問號前面的位置是判斷的條件,判斷結(jié)果為boolean型,為true時調(diào)用表達(dá)式1,為false時調(diào)用表達(dá)式2。其邏輯為:如果條件表達(dá)式成立或者滿足則執(zhí)行表達(dá)式1,否則執(zhí)行第二個。
舉例:
int a = 10;
int b = 20;
int c = a > b ? a : b; // 判斷 a>b 是否為真,如果為真取a的值,如果為假,取b的值
2.8 三元運算符案例(應(yīng)用)
需求:
? 一座寺廟里住著三個和尚,已知他們的身高分別為150cm、210cm、165cm,請用程序?qū)崿F(xiàn)獲取這三個和尚的最高身高。
public class OperatorTest02 {
public static void main(String[] args) {
//1:定義三個變量用于保存和尚的身高,單位為cm,這里僅僅體現(xiàn)數(shù)值即可。
int height1 = 150;
int height2 = 210;
int height3 = 165;
//2:用三元運算符獲取前兩個和尚的較高身高值,并用臨時身高變量保存起來。
int tempHeight = height1 > height2 ? height1 : height2;
//3:用三元運算符獲取臨時身高值和第三個和尚身高較高值,并用最大身高變量保存。
int maxHeight = tempHeight > height3 ? tempHeight : height3;
//4:輸出結(jié)果
System.out.println("maxHeight:" + maxHeight);
}
}
3. 流程控制語句
在一個程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時候要通過控制語句的執(zhí)行順序來實現(xiàn)我們想要的功能。
3.1 流程控制語句分類(了解)
? 順序結(jié)構(gòu)
? 分支結(jié)構(gòu)(if, switch)
? 循環(huán)結(jié)構(gòu)(for, while, do…while)
3.2 順序結(jié)構(gòu)(了解)
順序結(jié)構(gòu)是程序中最簡單最基本的流程控制,沒有特定的語法結(jié)構(gòu),按照代碼的先后順序,依次執(zhí)行,程序中大多數(shù)的代碼都是這樣執(zhí)行的。
3.3 分支結(jié)構(gòu)之if語句
3.3.1 if語句格式1(理解)
格式:
if (關(guān)系表達(dá)式) {
語句體;
}
執(zhí)行流程:
①首先計算關(guān)系表達(dá)式的值
②如果關(guān)系表達(dá)式的值為true就執(zhí)行語句體
③如果關(guān)系表達(dá)式的值為false就不執(zhí)行語句體
④繼續(xù)執(zhí)行后面的語句內(nèi)容
示例:文章來源:http://www.zghlxwxcb.cn/news/detail-708142.html
public class IfDemo {
public static void main(String[] args) {
System.out.println("開始");
// 如果年齡大于18歲, 就可以上網(wǎng)吧
int age = 17;
if(age >= 18){
// int a = 10;
System.out.println("可以上網(wǎng)吧");
}
System.out.println("結(jié)束");
}
}
3.3.2 if語句格式2(理解)
格式:
if (關(guān)系表達(dá)式) {
語句體1;
} else {
語句體2;
}
執(zhí)行流程:
①首先計算關(guān)系表達(dá)式的值
②如果關(guān)系表達(dá)式的值為true就執(zhí)行語句體1
③如果關(guān)系表達(dá)式的值為false就執(zhí)行語句體2
④繼續(xù)執(zhí)行后面的語句內(nèi)容
示例:奇偶數(shù)
? 任意給出一個整數(shù),請用程序?qū)崿F(xiàn)判斷該整數(shù)是奇數(shù)還是偶數(shù),并在控制臺輸出該整數(shù)是奇數(shù)還是偶數(shù)。
public class Demo2If {
public static void main(String[] args) {
// 程序判斷一個數(shù), 是奇數(shù)還是偶數(shù)
int num = 9;
if(num % 2 == 0){
System.out.println("偶數(shù)");
}else{
System.out.println("奇數(shù)");
}
}
}
3.3.3 if語句格式3(理解)
格式:
if (關(guān)系表達(dá)式1) {
語句體1;
} else if (關(guān)系表達(dá)式2) {
語句體2;
}
…
else {
語句體n+1;
}
執(zhí)行流程:
①首先計算關(guān)系表達(dá)式1的值
②如果值為true就執(zhí)行語句體1;如果值為false就計算關(guān)系表達(dá)式2的值
③如果值為true就執(zhí)行語句體2;如果值為false就計算關(guān)系表達(dá)式3的值
④…
⑤如果沒有任何關(guān)系表達(dá)式為true,就執(zhí)行語句體n+1。
示例:
? 定義一個在0~100之間的變量a, 90100優(yōu)秀,8089良好,7079中等,6069及格,0~59請努力加油!文章來源地址http://www.zghlxwxcb.cn/news/detail-708142.html
public class Demo3If {
public static void main(String[] args){
int score = 65;
if(score >= 90 && score <= 100){
System.out.println("優(yōu)秀");
}else if (score >= 80 && score <= 89){
System.out.println("良好");
}else if (score >= 70 && score <= 79){
System.out.println("中等");
}else if (score >= 60 && score <= 69){
System.out.println("及格");
}else if (score >= 0 && score <= 59){
System.out.println("請努力加油");
}else{
System.out.println("成績有誤!");
}
}
}
到了這里,關(guān)于java基礎(chǔ)語法(運算符&循環(huán))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!