3、運(yùn)算符
算術(shù)運(yùn)算符
關(guān)系運(yùn)算符
邏輯運(yùn)算符
字符串連接運(yùn)算符
三元運(yùn)算符
賦值類(lèi)運(yùn)算符
1、算術(shù)運(yùn)算符
+求和
-相減
*乘積
/商
%求余
++自加(b=k++是先賦值再自加1,b=++k是先自加1再賦值。
e=100;
system.out.println(e++);100
system.out.println(e);101
--自減
運(yùn)算符有優(yōu)先級(jí),沒(méi)有必要刻意記住優(yōu)先級(jí),不確定就用括號(hào)確定優(yōu)先級(jí)
2、關(guān)系運(yùn)算符
>大于
<小于
==等于
<=小于等于
>=大于等于
!=不等于
3、邏輯運(yùn)算符(邏輯運(yùn)算符要求兩邊的算子必須是布爾類(lèi)型,并且最終的返回結(jié)果也是布爾類(lèi)型)
& 與
| 或
! 非
^ 邏輯異或
&& 短路與(運(yùn)算結(jié)果跟邏輯與完全相同,但是在int x=10,inty=8;system.out.println(x<y&++x<y)時(shí)&前面是false已經(jīng)是false了但是還是會(huì)執(zhí)行后面的表達(dá)式
使得y的值會(huì)自加,而int x=10,inty=8;system.out.println(x<y&&++x<y))時(shí)&前面是false已經(jīng)是false了后面的++x<y就不執(zhí)行也不判斷了。
|| 短路或
4、賦值類(lèi)運(yùn)算符;
基本賦值運(yùn)算符
=
先執(zhí)行等號(hào)右邊的表達(dá)式,將執(zhí)行的結(jié)果賦值給右邊的變量。(k++)不是這樣的
擴(kuò)展的賦值運(yùn)算符
+=:i+=5等同于i=i+5
-=:i-=5等同于i=i-5
*=:i*=5等同于i=i*5
/=:i/=5等同于i=i/5
%=:i%=5等同于i=i%5
byte b=10;
b=b+5;
編譯會(huì)報(bào)錯(cuò),因?yàn)閎是byte類(lèi)型,5是int類(lèi)型,加到一起是int類(lèi)型,這是必須要進(jìn)行變量數(shù)據(jù)類(lèi)型轉(zhuǎn)換。
改為b=(byte)(b+5);
byte b=10;
b+=5;
編譯可以通過(guò),因?yàn)閎+=5;和b=b+5;并不相同,而是與b=(byte)(b+5)相同。
結(jié)論:擴(kuò)展類(lèi)的賦值運(yùn)算符不改變運(yùn)算結(jié)果類(lèi)型。
5、java中的“+”運(yùn)算符;
1、加法運(yùn)算:+運(yùn)算符兩邊是數(shù)字,進(jìn)行的是加法運(yùn)算
2、字符串的連接運(yùn)算:1、+號(hào)兩邊都是字符串2、+號(hào)兩邊有一個(gè)是字符串,返回結(jié)果還是字符串。
3、在一個(gè)表達(dá)式當(dāng)中可以出現(xiàn)多個(gè)“+”,在沒(méi)有添加小括號(hào)的前提下,遵守從左向右順序依次運(yùn)算。
system.out.println(10+20+"30")輸出結(jié)果是3030
system.out.println(10+(20+"30"))輸出結(jié)果是102030
int a=10;
int b=20;
system.out.println(“10+20=”+a+b)//“10+20=1020”
system.out.println(“10+20=”+(a+b))//“10+20=30”
system.out.println(a+"+"+b+"="+(a+b))//“動(dòng)態(tài)表示a+b”
引用類(lèi)型string
string是sun公司在javase中提醒的字符串類(lèi)型
string.class字節(jié)碼文件,
string是引用數(shù)據(jù)類(lèi)型,s是變量名,“abc”是string類(lèi)型的字面值
string s=“abc”;
6、三元運(yùn)算符:
布爾表達(dá)式?表達(dá)式1:表達(dá)式2;
三元運(yùn)算符執(zhí)行原理;當(dāng)布爾表達(dá)式的結(jié)果是真的時(shí)候選表達(dá)式1的結(jié)果作為表達(dá)式結(jié)果否則選擇表大四2作為執(zhí)行結(jié)果。
boolea sex=false;
sex?"nan":"nv"
編譯會(huì)報(bào)錯(cuò),因?yàn)?nan"和"nv"不是語(yǔ)句
boolea sex=false;
string? c=sex?"nan":"nv"
system.out.println(c);
編譯通過(guò)
string? c=sex?"nan":'nv'//編譯不通過(guò),不符合語(yǔ)法,又有字符串又有字符是無(wú)法賦值給同一個(gè)類(lèi)型的變量。
system.out.println(c);
//編譯通過(guò),println既可以打印字符有可以打印字符串
system.out.println(string? c=sex?"nan":'nv');
7、控制語(yǔ)句
if語(yǔ)句語(yǔ)法:四種編寫(xiě)方式(只要一個(gè)分支執(zhí)行程序在執(zhí)行完該分支后程序立刻就結(jié)束)
1、if(布爾表達(dá)式)
{
Java語(yǔ)句
}
2、if(布爾表達(dá)式)
{
java語(yǔ)句
}
else{
java語(yǔ)句
}
3、if(布爾表達(dá)式)
{
java語(yǔ)句
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
4、if(布爾表達(dá)式)
{
java語(yǔ)句
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else if(布爾表達(dá)式)
{
java表達(dá)式
}
else
{
java表達(dá)式
}
只要有else的語(yǔ)句就保證至少有一個(gè)分支執(zhí)行,但是沒(méi)有else語(yǔ)句,就不是一定執(zhí)行至少一個(gè)分支。
在寫(xiě)代碼時(shí)必須要縮進(jìn)保證可讀性。
if語(yǔ)句中如果只有一條java語(yǔ)句時(shí),大括號(hào)可以不寫(xiě),但這種方式不推薦使用但別人寫(xiě)要能看
鍵盤(pán)輸入的語(yǔ)句
public class KeyInputTest
{
public static void main(String[]args)
{ //創(chuàng)建鍵盤(pán)掃描器對(duì)象
java.uti1.Scanner s=new java.util.Scanner(System.in);
//第二步;調(diào)用Scanner對(duì)象的next()方法開(kāi)始接收輸入
//當(dāng)用戶(hù)輸入的時(shí)候,并且最終敲回車(chē)鍵的時(shí)候,鍵入的信息會(huì)自動(dòng)賦值給userInputContent
//程序執(zhí)行到這里,用戶(hù)輸入的信息已經(jīng)在內(nèi)存條中了
String userInputContent=s.next();//輸入字符串
int userInputContent=s.nextint();//輸入數(shù)字值
//將內(nèi)存中的數(shù)據(jù)輸出到控制臺(tái)
system.out.println("您輸入了"+userInputContent);
}
}
判斷天氣:
public class KeyInputTest
{
public static void main(String[]args)
{ //創(chuàng)建鍵盤(pán)掃描器對(duì)象
java.uti1.Scanner s=new java.util.Scanner(System.in);
system.out.println("歡迎使用本系統(tǒng)");
system.out.println("說(shuō)明1:1表示下雨,0表示晴天");
system.out.println("說(shuō)明2:1表示男,0表示女");
system.out.println("說(shuō)明3:溫度為數(shù)字");
system.out.println("請(qǐng)輸入當(dāng)前天氣情況:");
String userInputContent=s.next("請(qǐng)輸入當(dāng)前天氣情況:");//提示輸入天氣
int weather=s.nextint();//輸入天氣
//將內(nèi)存中的數(shù)據(jù)輸出到控制臺(tái)
判斷天氣情況
if ( weather==1)
{
system.out.println("下雨天");
{
else if(weather==0)
{
system.out.println("下雨天");
}
}
}
控制語(yǔ)句:
選擇結(jié)構(gòu)
1、switch語(yǔ)句
2、語(yǔ)法結(jié)構(gòu)switch也是選擇結(jié)構(gòu),也是分支語(yǔ)句
語(yǔ)法:
switch(int或者string類(lèi)型的字面值或者變量)
{
case int或者string類(lèi)型的字面值或者變量;
java語(yǔ)句
break;
case int或者string類(lèi)型的字面值或者變量;
java語(yǔ)句
break;
case int或者string類(lèi)型的字面值或者變量;
java語(yǔ)句
break;
.........
default://所有情況都不符合
java語(yǔ)句
}
3、switch語(yǔ)句的執(zhí)行原理:
switch后面小括號(hào)當(dāng)中的數(shù)據(jù)和后面case后面的數(shù)據(jù)進(jìn)行一一匹配,匹配成功的分支執(zhí)行
自上而下的順序以此匹配
4、匹配成功的分支執(zhí)行,分支當(dāng)中最后有break語(yǔ)句的話(huà),整個(gè)switch語(yǔ)句終止。
5、匹配成功的分支執(zhí)行,分支中沒(méi)有break語(yǔ)句的話(huà),直接進(jìn)入下一個(gè)分支執(zhí)行,不進(jìn)行匹配。這種現(xiàn)象被稱(chēng)為穿透的現(xiàn)象。
6、所有分支都沒(méi)有匹配成功,當(dāng)有default的語(yǔ)句時(shí),會(huì)執(zhí)行default分支里面的語(yǔ)句。
7、switch后面和case后面只能是int或者string類(lèi)型的數(shù)據(jù),不能參測(cè)其他類(lèi)型,其他類(lèi)型的數(shù)據(jù)當(dāng)作為參數(shù)時(shí)會(huì)被默認(rèn)轉(zhuǎn)換成int和string類(lèi)型,并且在大轉(zhuǎn)小的時(shí)候會(huì)報(bào)錯(cuò)可能精度錯(cuò)誤。
8、case可以合并;
int i=10;
switch(i)
{case1:case2:case3:case10;
system.out.println("Test code!");
}//在i為1,2,3,10的時(shí)候執(zhí)行語(yǔ)句。
pubulic class switch_Test
{
public static void main(string[]args
{
long X=100L;
switch(X){}//編譯會(huì)報(bào)錯(cuò),因?yàn)閄是長(zhǎng)整型,默認(rèn)轉(zhuǎn)換成int類(lèi)型后,報(bào)錯(cuò)可能損失精度。
long X=100L;
switch((int)X){}//這次編譯通過(guò),因?yàn)橐呀?jīng)轉(zhuǎn)換完全,這是就是用括號(hào)中的數(shù)據(jù)進(jìn)行判斷。
}
}
實(shí)現(xiàn)計(jì)算器:
思路:1、選擇所有數(shù)據(jù)從鍵盤(pán)上輸入
? 2、使用switch語(yǔ)句進(jìn)行判斷
? 3、需要從控制臺(tái)輸入三次:
*第一個(gè)數(shù)字:10
*輸入運(yùn)算符+
*請(qǐng)輸入第二個(gè)數(shù)字:20
*運(yùn)算結(jié)果:10+20=30
public class switch04
{
public static void main(string[]args)
{
java.util.scanner s=new java.util.scanner(system.in);
system.out.println("歡迎使用簡(jiǎn)單計(jì)算器系統(tǒng)");
system.out.println("請(qǐng)輸入第一個(gè)數(shù)字");
int num1=s.nextint()
system.out.println("請(qǐng)輸入第一個(gè)運(yùn)算符");
int operator=s.next();
system.out.println("請(qǐng)輸入第二個(gè)數(shù)字");
int num2=s.nextint();
switch(operator)
{ case"+":
result=nuum1+num2;
break;
case"-":
result=nuum1-num2;
break;
case"*":
result=nuum1*num2;
break;
case"/":
result=nuum1*num2;
break;
default:
system.out.println("只能計(jì)算加減乘除");
}
system.out.println("計(jì)算結(jié)果為"+result);
}
}
循環(huán)語(yǔ)句:
循環(huán)結(jié)構(gòu):在程序當(dāng)中總有一些代碼必須重復(fù)執(zhí)行;需要重復(fù)執(zhí)行的代碼放在循環(huán)體里,在聯(lián)合計(jì)數(shù)器,共同控制這段按需要反復(fù)之行的代碼。
總共有三種循環(huán):
for循環(huán)
while循環(huán)
do..while循環(huán)
1、for循環(huán)
語(yǔ)法;
for(初始化表達(dá)式;布爾表達(dá)式;更新表達(dá)式)
{
需要重復(fù)的代碼片段
}
1、初始化表達(dá)式、布爾表達(dá)式、更新表達(dá)式都不是必須的必須的是兩個(gè)分號(hào)
2、初始化表達(dá)式最先執(zhí)行,并且只在循環(huán)中執(zhí)行一次
3、先進(jìn)行初始換表達(dá)式,1、判斷布爾表達(dá)式,2、執(zhí)行循環(huán)體,3、執(zhí)行更新表達(dá)式,1、然后布爾表達(dá)式,2、若為真然后執(zhí)行循環(huán)體,3、執(zhí)行更新表達(dá)式,1然后布爾表達(dá)式。
public class for_Test
{
public static void main(string[]args)
{ int i=0;
for(;i<=10;i++)
{
system.out.println("i="+i);//此時(shí)只能輸出i=0,因?yàn)閒or循環(huán)對(duì)變量的作用只在for循環(huán)中有作用,出了for循環(huán)就不會(huì)有任何作用。
}
}
}
2、while循環(huán):
語(yǔ)法:
1、while循環(huán)的語(yǔ)法結(jié)構(gòu):
while(布爾表達(dá)式)
{
循環(huán)體;
}
語(yǔ)法結(jié)構(gòu):
執(zhí)行原理
先判斷布爾表達(dá)式,再執(zhí)行循環(huán)體,判斷布爾表達(dá)式
執(zhí)行次數(shù)
0到N
3、do......while 循環(huán)
語(yǔ)法結(jié)構(gòu):
do{
循環(huán)體;
? }
while(布爾表達(dá)式);
執(zhí)行原理 先執(zhí)行再判斷
執(zhí)行次數(shù) 1到N次
注意事項(xiàng)注意while(布爾表達(dá)式)后面的分號(hào)別丟了。
控制循環(huán)的語(yǔ)句;
1、break語(yǔ)句:跳出內(nèi)層for循環(huán),使得循環(huán)結(jié)束。不影響外層循環(huán)
forA:for (int j=0;j<=9 ; j++)
{
forB:for (inti=0;i<=10 ;i++ )
{
if(i==5)
{
break forA//此時(shí)可以直接跳出最外層循環(huán)
}
}
}
2、comtinue語(yǔ)句:跳出本次循環(huán),進(jìn)入下一次循環(huán)。不影響外層循環(huán)
方法:
方法的基礎(chǔ)語(yǔ)法以及方法的重載機(jī)制:overload
某個(gè)功能的代碼只需要寫(xiě)一遍,使用這個(gè)功能只需要傳遞具體的數(shù)據(jù)即可,這個(gè)功能完成后返回一個(gè)最終的結(jié)果。這樣的代碼可以重復(fù)的使用這就是方法
使用這個(gè)方法我們成為調(diào)用invoke,方法在c語(yǔ)言中又叫做函數(shù)。
方法的定義可以在任何位置,因?yàn)橹挥姓{(diào)用時(shí)才有順序,但是不能在方法中再定義方法,在方法體中代碼遵守自上而下的順序依次執(zhí)行。
語(yǔ)法
語(yǔ)法結(jié)構(gòu):[修飾符列表]返回值類(lèi)型 方法名(形式參數(shù)列表)
{
方法體;
}
注意:
1、關(guān)于修飾符選項(xiàng):
可選項(xiàng)不是必須的
目前統(tǒng)一寫(xiě)成:public static【以后講】
方法的修飾符列表當(dāng)中有static關(guān)鍵字的話(huà),怎么調(diào)用這個(gè)方法?
類(lèi)名.方法名(實(shí)際參數(shù)列表)
2、返回值類(lèi)型:
返回值是調(diào)用方法后方法最終給出的結(jié)果
返回值類(lèi)型包括所有基本數(shù)據(jù)類(lèi)型和所有的引用數(shù)據(jù)類(lèi)型
有些方法沒(méi)有返回值,那么返回值類(lèi)型必須寫(xiě)個(gè)void
寫(xiě)代碼的時(shí)候,return語(yǔ)句必須在沒(méi)有void關(guān)鍵字的所有方法里存在,但是return的值必須與方法定義的時(shí)候返回值類(lèi)型必須要相同。
寫(xiě)代碼return 值;就可以返回值了,只要帶有return的語(yǔ)句執(zhí)行,這個(gè)return語(yǔ)句所在的方法結(jié)束。
3、方法名;
只要是合法的標(biāo)識(shí)符就行
方法名最好見(jiàn)名知意
方法名遵序駝峰命名規(guī)則
方法名首字母要求小寫(xiě),后面每一個(gè)單詞的首字母大寫(xiě)
4、形式參數(shù)列表
形參是局部變量,且可以有多個(gè)形參,不同的形參用“,”隔開(kāi),調(diào)用形參時(shí)實(shí)參必須與形參的數(shù)據(jù)類(lèi)型相同。實(shí)參列表和形參列表必須滿(mǎn)足數(shù)量相同,且類(lèi)型對(duì)應(yīng)相同。
如果類(lèi)型不同將會(huì)進(jìn)行自動(dòng)數(shù)據(jù)類(lèi)型轉(zhuǎn)換。
5、方法體
方法體必須由大括號(hào)括起來(lái)
方法體中的代碼必須有順序
自上而下執(zhí)行
每一個(gè)方法體必須由java語(yǔ)句組成,每一個(gè)java語(yǔ)句必須以;結(jié)尾