Java基礎(chǔ)語法

1 、類型轉(zhuǎn)換

在Java中,一些數(shù)據(jù)類型之間是可以相互轉(zhuǎn)換的。分為兩種情況:自動類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。

1.1 自動類型轉(zhuǎn)換(隱式轉(zhuǎn)換)

把一個表示數(shù)據(jù)范圍小的數(shù)值或者變量賦值給另一個表示數(shù)據(jù)范圍大的變量。這種轉(zhuǎn)換方式是自動的,直接書寫即可。例如:

double num=10;// 將int類型的10直接賦值給double類型

System.out.println(num);// 輸出10.0

類型從小到大關(guān)系圖:


說明:

整數(shù)默認(rèn)是int類型,byte、short和char類型數(shù)據(jù)參與運(yùn)算均會自動轉(zhuǎn)換為int類型。

byte b1=10;

byte b2=20;

byte b3=b1+b2;

// 第三行代碼會報錯,b1和b2會自動轉(zhuǎn)換為int類型,計(jì)算結(jié)果為int,int賦值給byte需要強(qiáng)制類型轉(zhuǎn)換。

// 修改為:

int num=b1+b2;

// 或者:

byte b3=(byte) (b1+b2);

boolean類型不能與其他基本數(shù)據(jù)類型相互轉(zhuǎn)換。

1.2 強(qiáng)制轉(zhuǎn)換

把一個表示數(shù)據(jù)范圍大的數(shù)值或者變量賦值給另一個表示數(shù)據(jù)范圍小的變量。

強(qiáng)制類型轉(zhuǎn)換格式:目標(biāo)數(shù)據(jù)類型 變量名 = (目標(biāo)數(shù)據(jù)類型)值或者變量;

例如:

double num1=5.5;

int num2=(int)num1;// 將double類型的num1強(qiáng)制轉(zhuǎn)換為int類型

System.out.println(num2);// 輸出5(小數(shù)位直接舍棄)

1.3 類型轉(zhuǎn)換案例

案例代碼:

byte a=3;

byte b=4;

byte c=a+b;//錯誤。因?yàn)閮蓚€byte變量相加,會先提升為int類型

byte d=3+4;//正確。常量優(yōu)化機(jī)制

常量優(yōu)化機(jī)制:在編譯時,整數(shù)常量的計(jì)算會直接算出結(jié)果,并且會自動判斷該結(jié)果是否在byte取值范圍內(nèi),

在:編譯通過

不在:編譯失敗

2. 運(yùn)算符

2.1 算術(shù)運(yùn)算符

2.1.1 運(yùn)算符和表達(dá)式

運(yùn)算符:對常量或者變量進(jìn)行操作的符號。

表達(dá)式:用運(yùn)算符把常量或者變量連接起來符合java語法的式子就可以稱為表達(dá)式。

? ? ? ? ? ? ? ? ? ? 不同運(yùn)算符連接的表達(dá)式體現(xiàn)的是不同類型的表達(dá)式。

舉例說明:

int? a=10;

int? b=20;

int? c=a+b;

? +:是運(yùn)算符,并且是算術(shù)運(yùn)算符。

? a + b:是表達(dá)式,由于+是算術(shù)運(yùn)算符,所以這個表達(dá)式叫算術(shù)表達(dá)式。

2.1.2 算術(shù)運(yùn)算符

符號作用說明:+ - * / %

注意:

/和%的區(qū)別:兩個數(shù)據(jù)做除法,/取結(jié)果的商,%取結(jié)果的余數(shù)。

整數(shù)操作只能得到整數(shù),要想得到小數(shù),必須有浮點(diǎn)數(shù)參與運(yùn)算。

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ù)運(yùn)算,使用的是計(jì)算機(jī)底層對應(yīng)的十進(jìn)制數(shù)值。需要我們記住三個字符對應(yīng)的數(shù)值:

'a'? --? 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ùn)算,得出字符對應(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類型,不管是否有其他類型參與運(yùn)算。

整個表達(dá)式的類型自動提升到與表達(dá)式中最高等級的操作數(shù)相同的類型

? ? ? 等級順序:byte,short,char --> int --> long --> float --> double

例如:

byte? b1=10;

byte? b2=20;

// byte? b3 = b1 + b2; // 該行報錯,因?yàn)閎yte類型參與算術(shù)運(yùn)算會自動提示為int,int賦值給byte可能損失精度

int? i3=b1+b2;// 應(yīng)該使用int接收

byte? b3=(byte) (b1+b2);// 或者將結(jié)果強(qiáng)制轉(zhuǎn)換為byte類型

-------------------------------

int? num1=10;

double? num2=20.0;

double? num3=num1+num2;// 使用double接收,因?yàn)閚um1會自動提升為double類型

2.1.4 字符串的“+”操作

當(dāng)“+”操作中出現(xiàn)字符串時,這個”+”是字符串連接符,而不是算術(shù)運(yùn)算。

System.out.println("hello"+666);// 輸出:hello666

在”+”操作中,如果出現(xiàn)了字符串,就是連接運(yùn)算符,否則就是算術(shù)運(yùn)算。當(dāng)連續(xù)進(jìn)行“+”操作時,從左到右逐個執(zhí)行。

System.out.println(1+99+"年XO");// 輸出:100年XO

System.out.println(1+2+"hello"+3+4);// 輸出:3hello34

// 可以使用小括號改變運(yùn)算的優(yōu)先級

System.out.println(1+2+"hello"+(3+4));// 輸出:3hello7

2.1.5 數(shù)值拆分

需求:

鍵盤錄入一個三位數(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:個位的計(jì)算:數(shù)值 % 10

? ? ? ? int? ge=num%10;? ? ?

? ? ? ? // 3:十位的計(jì)算:數(shù)值 / 10 % 10

? ? ? ? int? shi=num/10%10;? ?

? ? ? ? // 4:百位的計(jì)算:數(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 自增自減運(yùn)算符\

符號作用說明:

++自增變量的值加1

--自減變量的值減1

注意事項(xiàng):

++和-- 既可以放在變量的后邊,也可以放在變量的前邊。

單獨(dú)使用的時候, ++和-- 無論是放在變量的前邊還是后邊,結(jié)果是一樣的。

參與操作的時候,如果放在變量的后邊,先拿變量參與操作,后拿變量做++或者--。

參與操作的時候,如果放在變量的前邊,先拿變量做++或者--,后拿變量參與操作。

最常見的用法:單獨(dú)使用。

int? i=10;

i++;// 單獨(dú)使用

System.out.println("i:"+i);? // i:11

?

int? j=10;

++j;// 單獨(dú)使用

System.out.println("j:"+j);// j:11

?

int? x=10;

int? y=x++;// 賦值運(yùn)算,++在后邊,所以是使用x原來的值賦值給y,x本身自增1

System.out.println("x:"+x+", y:"+y);// x:11,y:10

?

int? m=10;

int? n=++m;// 賦值運(yùn)算,++在前邊,所以是使用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)行計(jì)算,但第二次自增時,x的值已經(jīng)自增到11了,所以第二次使用的是11,然后再次自增。。。

所以整個式子應(yīng)該是:int y = 10 + 11 + 12;

輸出結(jié)果為33。

2.3 賦值運(yùn)算符

賦值運(yùn)算符的作用是將一個表達(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ò)展的賦值運(yùn)算符隱含了強(qiáng)制類型轉(zhuǎn)換。

short? s=10;

s=s+10;// 此行代碼報出,因?yàn)檫\(yùn)算中s提升為int類型,運(yùn)算結(jié)果int賦值給short可能損失精度

s+=10;// 此行代碼沒有問題,隱含了強(qiáng)制類型轉(zhuǎn)換,相當(dāng)于 s = (short) (s + 10);

2.4 關(guān)系運(yùn)算符

關(guān)系運(yù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

注意事項(xiàng):

關(guān)系運(yù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)系運(yùn)算的結(jié)果肯定是boolean類型,所以也可以將運(yùn)算結(jié)果賦值給boolean類型的變量

boolean? flag=a>b;

System.out.println(flag);????? // 輸出false

2.5 邏輯運(yùn)算符

邏輯運(yùn)算符把各個運(yùn)算的關(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 短路邏輯運(yùn)算符

符號作用說明

&& 短路與?? 作用和&相同,但是有短路效果

||? 短路或?? 作用和|相同,但是有短路效果

在邏輯與運(yùn)算中,只要有一個表達(dá)式的值為false,那么結(jié)果就可以判定為false了,沒有必要將所有表達(dá)式的值都計(jì)算出來,短路與操作就有這樣的效果,可以提高效率。同理在邏輯或運(yùn)算中,一旦發(fā)現(xiàn)值為true,右邊的表達(dá)式將不再參與運(yùn)算。

邏輯與 &,無論左邊真假,右邊都要執(zhí)行。

短路與 &&,如果左邊為真,右邊執(zhí)行;如果左邊為假,右邊不執(zhí)行。

邏輯或 |,無論左邊真假,右邊都要執(zhí)行。

短路或 ||,如果左邊為假,右邊執(zhí)行;如果左邊為真,右邊不執(zhí)行。

int? x=3;

int? y=4;

System.out.println((x++>4)&(y++>5));// 兩個表達(dá)都會運(yùn)算

System.out.println(x);// 4

System.out.println(y);// 5

System.out.println((x++>4)&&(y++>5));// 左邊已經(jīng)可以確定結(jié)果為false,右邊不參與運(yùn)算

System.out.println(x);// 4

System.out.println(y);// 4

2.7 三元運(yùn)算符

三元運(yùn)算符語法格式:

關(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ùn)算符案例

需求:

一座寺廟里住著三個和尚,已知他們的身高分別為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:用三元運(yùn)算符獲取前兩個和尚的較高身高值,并用臨時身高變量保存起來。

? ? ? ? int? tempHeight=height1>height2?height1:height2;? ?

? ? ? ? //3:用三元運(yùn)算符獲取臨時身高值和第三個和尚身高較高值,并用最大身高變量保存。

? ? ? ? int? maxHeight=tempHeight>height3?tempHeight:height3;? ?

? ? ? ? //4:輸出結(jié)果

? ? ? ? System.out.println("maxHeight:"+maxHeight);

? ? }

}

3. 流程控制語句

在一個程序執(zhí)行的過程中,各條語句的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的。所以,我們必須清楚每條語句的執(zhí)行流程。而且,很多時候要通過控制語句的執(zhí)行順序來實(shí)現(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í)行的。

順序結(jié)構(gòu)執(zhí)行流程圖:


3.3 分支結(jié)構(gòu)之if語句

3.3.1 if語句格式1

格式:

if(關(guān)系表達(dá)式) {

語句體;? ?

}

執(zhí)行流程:

①首先計(jì)算關(guān)系表達(dá)式的值

②如果關(guān)系表達(dá)式的值為true就執(zhí)行語句體

③如果關(guān)系表達(dá)式的值為false就不執(zhí)行語句體

④繼續(xù)執(zhí)行后面的語句內(nèi)容


3.3.2 if語句格式2

格式:

if(關(guān)系表達(dá)式) {

語句體1;?

}else{

語句體2;?

}

執(zhí)行流程:

①首先計(jì)算關(guān)系表達(dá)式的值

②如果關(guān)系表達(dá)式的值為true就執(zhí)行語句體1

③如果關(guān)系表達(dá)式的值為false就執(zhí)行語句體2

④繼續(xù)執(zhí)行后面的語句內(nèi)容


3.3.3 if語句格式3

格式:

if(關(guān)系表達(dá)式1) {

語句體1;?

}elseif(關(guān)系表達(dá)式2) {

語句體2;?

}

else{

語句體n+1;

}

執(zhí)行流程:

①首先計(jì)算關(guān)系表達(dá)式1的值

②如果值為true就執(zhí)行語句體1;如果值為false就計(jì)算關(guān)系表達(dá)式2的值

③如果值為true就執(zhí)行語句體2;如果值為false就計(jì)算關(guān)系表達(dá)式3的值

④…

⑤如果沒有任何關(guān)系表達(dá)式為true,就執(zhí)行語句體n+1。


3.3.4 if語句格式3案例

需求:小明快要期末考試了,小明爸爸對他說,會根據(jù)他不同的考試成績,送他不同的禮物,假如你可以控制小明的得分,請用程序?qū)崿F(xiàn)小明到底該獲得什么樣的禮物,并在控制臺輸出。

分析:

①小明的考試成績未知,可以使用鍵盤錄入的方式獲取值

②由于獎勵種類較多,屬于多種判斷,采用if...else...if格式實(shí)現(xiàn)

③為每種判斷設(shè)置對應(yīng)的條件

④為每種判斷設(shè)置對應(yīng)的獎勵

import? java.util.Scanner;

public class IfTest02{

? ? public static void main(String[] args){

? ? ? ? // 1. 使用Scanner錄入考試成績

? ? ? ? Scanner? sc=newScanner(System.in);

? ? ? ? System.out.println("請輸入您的成績:");

? ? ? ? int? score=sc.nextInt();

? ? ? ? // 2. 判斷成績是否在合法范圍內(nèi) 0~100

? ? ? ? if(score>=0&&score<=100){

? ? ? ? ? ? // 合法成績

? ? ? ? ? ? // 3. 在合法的語句塊中判斷成績范圍符合哪一個獎勵

? ? ? ? ? ? if(score>=95&&score<=100){

? ? ? ? ? ? ? ? System.out.println("自行車一輛");

? ? ? ? ? ? }else? if(score>=90&&score<=94){

? ? ? ? ? ? ? ? System.out.println("游樂場一次");

? ? ? ? ? ? }else? if(score>=80&&score<=89){

? ? ? ? ? ? ? ? System.out.println("變形金剛一個");

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? System.out.println("挨頓揍, 這座城市又多了一個傷心的人~");

? ? ? ? ? ? }

? ? ? ? } else {

? ? ? ? ? ? // 非法的話, 給出錯誤提示

? ? ? ? ? ? System.out.println("您的成績輸入有誤!");

? ? ? ? }

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容