java程序的基本結(jié)構(gòu)
一、程序結(jié)構(gòu)
程序的根本結(jié)構(gòu)包括順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。
順序結(jié)構(gòu)依照句子的書寫次序順次履行;
挑選結(jié)構(gòu)依據(jù)條件是否滿意來挑選條件是否滿意來履行對應(yīng)的程序段,Java供給了if和switch句子用來開發(fā)分支結(jié)構(gòu)的程序;
循環(huán)結(jié)構(gòu)在給定條件下重復(fù)履行一些程序段,Java語言供給了while、do-while、for句子完成循環(huán)結(jié)構(gòu)。
二、分支結(jié)構(gòu)
程序中有些程序段的履行是有條件的,當(dāng)條件成立時,履行一些程序段,當(dāng)條件不成立時履行另一些程序段或者不履行,這種程序結(jié)構(gòu)就叫做分支結(jié)構(gòu),也叫挑選結(jié)構(gòu)。
1、單分支if句子
單一的if句子是最常用的單分支結(jié)構(gòu),運(yùn)用一個boolean表達(dá)式進(jìn)行條件判別。假如boolean表達(dá)式的值true,表明滿意條件,則履行緊跟if句子后{}中的程序段。
CreatedwithRapha?l2.2.0開端布爾表達(dá)式要履行的句子完畢yesno
單分支if句子的語法格局如下:
if(布爾表達(dá)式){
//假如布爾表達(dá)式表達(dá)式為true將履行的句子
}
2、雙分支句子if…else句子
雙分支的if…else句子,運(yùn)用一個boolean表達(dá)式進(jìn)行判別,假如布爾表達(dá)式的值為true,表明條件滿意,則履行if句子后邊緊跟的{}中的代碼塊;假如布爾表達(dá)式的值為false,表明條件不滿意,則履行else后邊緊跟的{}中的代碼塊。
CreatedwithRapha?l2.2.0開端布爾表達(dá)式要履行的句子1完畢要履行的句子2yesno
雙分支句子if…else句子的語法格局如下:
if(布爾表達(dá)式){
//布爾表達(dá)式為true時要履行的代碼塊
}else{
//布爾表達(dá)式為false時要履行的代碼塊
}
條件運(yùn)算符(三元運(yùn)算符)也能夠完成分支結(jié)構(gòu)
代碼示例1:
publicclassTest{
publicstaticvoidmain(String[]args){
Scannerinput=newScanner(System.in);
intclass1Score,class2Score,maxScore;
System.out.println(“請輸入一班的競賽成果:”);
class1Score=input.nextInt();
System.out.println(“請輸入二班的競賽成果:”);
class2Score=input.nextInt();
if(class1Score>class2Score){
maxScore=class1Score;
}else{
maxScore=class2Score;
}
System.out.println(“優(yōu)勝班的成果是:”+maxScore);
}
}
代碼示例2:
publicclassTest{
publicstaticvoidmain(String[]args){
Scannerinput=newScanner(System.in);
intclass1Score,class2Score,maxScore;
System.out.println(“請輸入一班的競賽成果:”);
class1Score=input.nextInt();
System.out.println(“請輸入二班的競賽成果:”);
class2Score=input.nextInt();
maxScore=(class1Score>class2Score)?class1Score:class2Score;//運(yùn)用三元運(yùn)算符完成雙分支結(jié)構(gòu)
System.out.println(“優(yōu)勝班的成果是:”+maxScore);
}
}
上面的兩段代碼完成的功能一致,能夠看出,當(dāng)雙分支結(jié)構(gòu)中判別條件(布爾表達(dá)式)與要履行的句子都比較簡單是時運(yùn)用條件運(yùn)算符(三元運(yùn)算符)代碼會愈加簡練優(yōu)雅。
3、嵌套的if…else句子
if句子后邊緊跟的{}中的代碼塊中和else后邊緊跟的{}中的代碼塊中,都能夠持續(xù)嵌套if…else句子,用以完成更復(fù)雜的分支結(jié)構(gòu)。
publicclassTest{
publicstaticvoidmain(String[]args){
/*
判別閏年的邏輯:
整百的年份能夠被400整除,為閏年,不然不是;其他年份被4整除為閏年,不然不是
*/
Scannerscanner=newScanner(System.in);
System.out.println(“請輸入年份:”);
intyear=scanner.nextInt();
if(year%100==0){
if(year%400==0){
System.out.println(year+”是閏年”);
}else{
System.out.println(year+”不是閏年”);
}
}else{
if(year%4==0){
System.out.println(year+”是閏年”);
}else{
System.out.println(year+”不是閏年”);
}
}
}
}
4、多分支if…elseif…else句子
當(dāng)判別條件比較多時,能夠運(yùn)用多分支if…elseif…else句子。
CreatedwithRapha?l2.2.0開端布爾表達(dá)式1履行的句子1完畢布爾表達(dá)式1履行的句子3布爾表達(dá)式1履行的句子4履行的句子2yesnoyesnoyesno
多分支if…elseif…else句子的語法格局如下:
if(布爾表達(dá)式1){
//布爾表達(dá)式1為true時將被履行的句子
}elseif(布爾表達(dá)式2){
//布爾表達(dá)式2為true時將被履行的句子
}elseif(布爾表達(dá)式3){
//布爾表達(dá)式3為true時將被履行的句子
}else{
//以上分支都沒有進(jìn)入時將被履行的句子
}
publicclassTest{
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
System.out.println(“請輸入成果:”);
intscore=scanner.nextInt();
if(score>=90){
System.out.println(“成果為:A”);
}elseif(score>=80){
System.out.println(“成果為:B”);
}elseif(score>=70){
System.out.println(“成果為:C”);
}elseif(score>=60){
System.out.println(“成果為:D”);
}else{
System.out.println(“成果為:E”);
}
}
}
在多分支if…elseif…else句子中,當(dāng)某一個作為判別條件的布爾表達(dá)式回來true時,即進(jìn)入對應(yīng)分支,之后其他分支中的布爾表達(dá)式不再進(jìn)行運(yùn)算,分支中的句子也不會被履行。
在多分支if…elseif…else句子中,elseif句子能夠呈現(xiàn)屢次,最后的else句子是可選項。
5、switch句子
switch句子是Java中的多分支結(jié)構(gòu),switch句子能夠依據(jù)給定的表達(dá)式的值,從多個分支中挑選一個分支來履行。相當(dāng)于if…elseif…else…,但switch句子的可讀性更強(qiáng)。
switch句子的語法格局入下:
switch(表達(dá)式){
case常量1:
句子1;
break;
case常量2:
句子2;
break;
[…]
[default:
句子n;]
}
示例:
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
System.out.println(“請輸入成果:”);
intscore=scanner.nextInt();
intresult=score/10;
switch(result){
case9:
System.out.println(“成果為:A”);
break;
case8:
System.out.println(“成果為:B”);
break;
case7:
System.out.println(“成果為:C”);
break;
case6:
System.out.println(“成果為:D”);
break;
default:
System.out.println(“成果為:E”);
}
}
說明:
表達(dá)式回來的成果的數(shù)據(jù)類型能夠是byte、short、int、enum、String;
case句子能夠呈現(xiàn)屢次;
break句子和default句子是可選項;
switch句子首要核算表達(dá)式的值,假如表達(dá)式的值和那個case后邊的常量值持平,就履行該case對應(yīng)的句子塊,直到遇到break為止。假如沒有遇到一個常量表達(dá)式的值與表達(dá)式的值持平,則履行default句子對應(yīng)的句子塊,假如沒有default句子switch句子不履行任何操作。
6、綜合事例之任意輸入一個年份數(shù)與月份數(shù),查出這個月有多少天
packagecom.husung.test;
importjava.util.Scanner;
publicclassYear{
publicstaticvoidmain(String[]args){
Scannerinput=newScanner(System.in);
System.out.println(“請輸入您要查詢的年份:”);
intyear=input.nextInt();
System.out.println(“請輸入您要查詢的月份:”);
intmonth=input.nextInt();
switch(month){
case1:
case3:
case5:
case7:
case8:
case10:
case12:
System.out.println(year+”年”+month+”月有31天”);
break;
case4:
case6:
case9:
case11:
System.out.println(year+”年”+month+”月有30天”);
case2:
if(year%400==0){
System.out.println(year+”年”+month+”月有29天”);
}elseif(year%4==0&&year%100!=0){
System.out.println(year+”年”+month+”月有29天”);
}else{
System.out.println(year+”年”+month+”月有28天”);
}
}
}
}
本例中,嵌套運(yùn)用了switch句子和if…elseif…else句子,用以判別用戶輸入的某一具體年月有多少天。
三、循環(huán)結(jié)構(gòu)
有些程序段需求在某些條件下重復(fù)履行屢次,稱為循環(huán)結(jié)構(gòu)程序。
Java供給了三種循環(huán)句子完成循環(huán)結(jié)構(gòu),包括while循環(huán)句子、do-while循環(huán)句子、for循環(huán)句子;他們的一起特點(diǎn)是依據(jù)給定的條件來判別是否持續(xù)履行指定的程序段。
1、while循環(huán)
while循環(huán)首要運(yùn)用一個布爾表達(dá)式進(jìn)行條件判別,假如布爾表達(dá)式的值為true,表明滿意條件,則履行while句子后緊跟的{}中的代碼塊,這代碼段即為循環(huán)體,循環(huán)體履行完之后,再核算布爾表達(dá)式進(jìn)行條件判別,假如boolean表達(dá)式的值仍為true,便再次履行循環(huán)體,構(gòu)成循環(huán),當(dāng)布爾表達(dá)式的值為false時,直接履行循環(huán)體之后的代碼塊。
CreatedwithRapha?l2.2.0開端布爾表達(dá)式循環(huán)體(需求重復(fù)履行的句子)完畢yesno
while循環(huán)句子的語法格局如下:
while(布爾表達(dá)式){
//循環(huán)體
}
while循環(huán)的特點(diǎn)是先判別再履行。
2、do-while循環(huán)
do-while循環(huán)與while循環(huán)的原理根本相同,不同的是,do-while循環(huán)先履行一遍循環(huán)體中的代碼塊,再核算布爾表達(dá)式進(jìn)行條件判別,假如布爾表達(dá)式的值仍為true,便再次履行循環(huán)體,構(gòu)成循環(huán);當(dāng)布爾表達(dá)式的值為false時直接履行循環(huán)體之后的代碼。
CreatedwithRapha?l2.2.0開端循環(huán)體布爾表達(dá)式完畢yesno
do-while循環(huán)句子的語法格局如下表:
do{
//循環(huán)體
}while(布爾表達(dá)式)
do-while循環(huán)的特點(diǎn)是先履行,再判別。
3、for循環(huán)句子
for循環(huán)句子是程序中運(yùn)用最多的循環(huán)結(jié)構(gòu),for循環(huán)運(yùn)用三個表達(dá)式,分別用來初始化循環(huán)變量,判別循環(huán)履行條件,以及改變循環(huán)變量。
CreatedwithRapha?l2.2.0開端表達(dá)式1(初始化循環(huán)變量)表達(dá)式2(判別循環(huán)履行條件)循環(huán)體表達(dá)式3(通常用來改變表達(dá)式的值)完畢yesno
for循環(huán)語法的語法格局如下:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3){
//循環(huán)體;
}
for循環(huán)通常用在已知循環(huán)次數(shù)的情況下。
下面是一個隨機(jī)生成五位暗碼的示例:
publicclassPassword{
publicstaticvoidmain(String[]args){
Randomrandom=newRandom();
Stringpass=””;
for(inti=0;i<5;i++){
intr=random.nextInt(26);//產(chǎn)生隨機(jī)數(shù)的上限[0~26]
r+=97;//r的值是區(qū)間[97,122]內(nèi)的整數(shù),這個區(qū)間的整數(shù)與ASCII中的
//小寫字母剛好對應(yīng)。而(char)r將一個整數(shù)轉(zhuǎn)換成對應(yīng)的字符。
pass=pass+(char)r;
}
System.out.println(“pass=”+pass);
}
}
說明:
本例運(yùn)用Java供給的隨機(jī)數(shù)的生成辦法,合作循環(huán)一個五次的for循環(huán)句子,生成五位長度的隨機(jī)暗碼;
Java中生成隨機(jī)數(shù)的辦法的類有兩個,一個是java.lang.Math和java.util.Random類;其間java.lang.Math類中供給的Random()辦法能夠生成一個[0.0~1.0)之間的隨機(jī)數(shù);類java.util.Random中供給了一系列的辦法能夠生成指定范圍的隨機(jī)數(shù),如nextInt()、nextDouble()等;
4、break句子
Java中供給了break句子,可用于switch句子或while、do-while、for循環(huán)句子,假如程序履行到break句子,立即從switch句子或循環(huán)體中退出。
5、continue句子
continue句子用于while、do-while、for句子的循環(huán)體中,假如程序履行到continue句子,,則完畢本次循環(huán),回到循環(huán)條件處再次進(jìn)行判別是否履行。
6、多重循環(huán)
假如循環(huán)句子的循環(huán)體中又包括循環(huán)句子,稱為嵌套循環(huán)。被包括的循環(huán)稱為內(nèi)循環(huán),包括的循環(huán)稱為外循環(huán),承建的循環(huán)嵌套是二重嵌套和三重嵌套;更多的嵌套由于代碼邏輯復(fù)雜,應(yīng)當(dāng)盡量防止運(yùn)用。循環(huán)嵌套既能夠是一種循環(huán)自身的嵌套,也能夠是不同循環(huán)句子彼此嵌套。
示例:九九乘法表
登錄后復(fù)制
packagecom.husung.test;
publicclassMultiplication{
publicstaticvoidmain(String[]args){
for(inti=1;i<10;i++){
for(intj=1;j<=i;j++){
System.out.print(j+”*”+i+”=”+i*j+””);
}
System.out.println();
}
}
}
java對象組成
JAVA目標(biāo)保存在內(nèi)存中時,由以下三部分組成:
1、目標(biāo)頭
2、實例數(shù)據(jù)
3、目標(biāo)填充字節(jié)
JAVA目標(biāo)頭由以下三部分組成:
1、MarkWord
2、指向類的指針
3、數(shù)組長度(只要數(shù)組目標(biāo)才有)