3.1 Java程序結(jié)構(gòu)
3.1.1 Java程序構(gòu)成
見P38 例3.1
說明:
?。?)Java源程序一般包括Java包引入(如果有的話)和類定義兩部分;
(2)Java程序必須包含一個(gè)可被外界所直接調(diào)用的類,即主類;
(3)一個(gè)Java程序可以定義多個(gè)類,但只能有一個(gè)主類,Java Applet程序的主類是繼承自Applet的子類;Java Application程序的主類是包含main方法的類,應(yīng)用程序從main方法開始執(zhí)行;
?。?)類定義由類聲明語(yǔ)句和類體組成;
?。?)類聲明語(yǔ)句用來說明類的名稱、訪問權(quán)限及類的屬性;
(6)類體也由兩部分組成:成員變量和成員方法;
?。?)成員變量為類中定義的變量(又稱屬性、域),用來說明類的狀態(tài)和特性。定義成員變量需要聲明成員變量的名稱、類型。
?。?)成員方法為類中定義的方法,用來實(shí)現(xiàn)類的功能和行為,是完成任務(wù)的關(guān)鍵。Java Application程序中一定要有main()主方法。而Java Applet程序一般要有init( )初始化方法或paint(Graphics g)畫圖方法;
?。?)類體中除了成員變量和成員方法說明語(yǔ)句外沒有其他語(yǔ)句,Java規(guī)定所有操作性語(yǔ)句必須放在成員方法中;
(10)Java方法類似于其他語(yǔ)言中的函數(shù),可以調(diào)用,可以有返回值。成員方法可以繼承父類的方法,也可以自定義成員方法。方法中也可以定義局部變量。
3.1.2 Java語(yǔ)句
語(yǔ)句以分號(hào)“;”作為結(jié)束標(biāo)志
Java語(yǔ)句分為說明性語(yǔ)句和操作性語(yǔ)句。
說明性語(yǔ)句用來說明包和類的引入、類的聲明、變量的聲明
如:import java.applet.Applet ;
操作性語(yǔ)句有表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句、選擇語(yǔ)句和循環(huán)語(yǔ)句等
1.表達(dá)式語(yǔ)句
int k, i=3 , j=4;
k=i*j;
2.復(fù)合語(yǔ)句
復(fù)合語(yǔ)句也稱為塊(block)語(yǔ)句,是包含在一對(duì)大括號(hào)“{ }”中的任意語(yǔ)句序列。從語(yǔ)法上講,一個(gè)復(fù)合語(yǔ)句被視為一個(gè)簡(jiǎn)單語(yǔ)句。
3.2 選擇語(yǔ)句
3.2.1 if語(yǔ)句
格式: if (條件表達(dá)式)
語(yǔ)句
功能:條件表達(dá)式為true就執(zhí)行語(yǔ)句
例: int i=70; char c='A';
if(i>=c) System.out.println("A小");
System.out.println("結(jié)束");
3.2.2 if……else語(yǔ)句
格式: if (條件表達(dá)式)
語(yǔ)句1
else
語(yǔ)句2
功能:條件表達(dá)式為true就執(zhí)行語(yǔ)句1,為false執(zhí)行語(yǔ)句2
例:if('A'>'a')
System.out.println("A比a大") ;
else
System.out.println("A比a小") ; // A65,a97,所以輸出A比a小
System.out.println("結(jié)束");
3.2.2 if……else 復(fù)合結(jié)構(gòu)
格式: if(條件表達(dá)式1) 語(yǔ)句1
else if (條件表達(dá)式2) 語(yǔ)句2
…………
else if (條件表達(dá)式n) 語(yǔ)句n
else 語(yǔ)句 n+1
功能:如果某個(gè)條件表達(dá)式的值為true,就執(zhí)行它后面的語(yǔ)句,其余部分被忽略,若條件表達(dá)式都為假,執(zhí)行else后語(yǔ)句。
例:public class SC{
public static void 輸入分?jǐn)?shù)(int a){
char 級(jí)別;
if (a>=90) 級(jí)別='優(yōu)';
else if (a>=80) 級(jí)別='良';
else if (a>=60) 級(jí)別='中';
else 級(jí)別='差';
System.out.println("考試等級(jí)為 "+級(jí)別); }
public static void main(String arg[]) throws Exception{
if(arg.length==0) System.out.println("您沒有輸入任何參數(shù)") ;
else if(arg.length==1)
輸入分?jǐn)?shù)(Integer.parseInt(arg[0])); //arg[0]強(qiáng)制轉(zhuǎn)換成int型
else {System.out.println("您輸入的參數(shù)太多了") ;
System.out.println("命令行參數(shù)個(gè)數(shù)為"+arg.length) ; }
} }
執(zhí)行:java SC 75 // 輸出:考試等級(jí)為 中
java SC // 輸出:您沒有輸入任何參數(shù)
java SC 75 86 // 輸出:您輸入的參數(shù)太多了
// 命令行參數(shù)個(gè)數(shù)為2
3.2.4 switch開關(guān)語(yǔ)句
格式:switch (表達(dá)式) {
case 常量1:[語(yǔ)句塊1;] [break;]
…………
case 常量n : [語(yǔ)句塊n;] [break;]
[default: 語(yǔ)句塊n+1;]
}
功能:先計(jì)算switch表達(dá)式,再與每個(gè)case常量表達(dá)式值相比較,若相同,則執(zhí)行相應(yīng)語(yǔ)句被執(zhí)行。若都不同,則執(zhí)行default語(yǔ)句n+1(若有的話)
說明:
1.switch后表達(dá)式必須是整型,字符型;
2.每個(gè)case的常量必須不同;
3.若沒有break,程序?qū)⒗^續(xù)執(zhí)行下一個(gè)case語(yǔ)句;
4.default位置可任意,但要注意break
例:int a=80,b=9;
char oper='/';
switch(oper) {
case '+' : System.out.println(a+"+"+b+"="+(a+b)); break;
case '-' : System.out.println(a+"-"+b+"="+(a-b)); break;
case '*' : System.out.println(a+"*"+b+"="+(a*b)); break;
case '/' : System.out.println(a+"/"+b+"="+(a/b)); break;
default : System.out.println("操作符錯(cuò)誤");
結(jié)果:80/9=8 //因?yàn)槭钦蛿?shù)相除
思考:
?。?)沒有break的情況(將會(huì)執(zhí)行“/”,“*”,“default”行);
?。?)若操作數(shù)都不符,default改變位置,能否執(zhí)行?(能),但后面要加“break”
例: public class SC{
public static void main(String a[])
{ int i=0,j=5;
switch(i) {
case 0: switch(j){
case 1: System.out.print("A"); break;
case 2: System.out.print("B"); break;
default:System.out.print("C") ; break; }
case 1: switch(j){
case 4: System.out.print("X"); break;
case 5: System.out.print("Y"); break; }
default: System.out.print("Z"); break; }}}
運(yùn)行結(jié)果: CYZ
3.3 循環(huán)語(yǔ)句
3.3.1 for循環(huán)語(yǔ)句(與C、C++相同)
格式: for(賦初值;判斷條件;循環(huán)控制變量增減方式)
{ 語(yǔ)句塊 }
功能:(1)第一次進(jìn)入for循環(huán)時(shí),對(duì)循環(huán)控制變量賦初值;
(2)根據(jù)判斷條件檢查是否要繼續(xù)執(zhí)行循環(huán)。為真執(zhí)行循環(huán)體內(nèi)語(yǔ)句塊,為假則結(jié)束循環(huán);
?。?)執(zhí)行完循環(huán)體內(nèi)語(yǔ)句后,系統(tǒng)根據(jù)“循環(huán)控制變量增減方式”改變控制變量值,再回到步驟(2)根據(jù)判斷條件檢查是否要繼續(xù)執(zhí)行循環(huán)。
例:public class SC {
public static void main(String args[]) {
int j=0 ;
for(int i=0 ; i<=5 ; i++) {
j+=i ;
System.out.println("j="+j) ; }
} }
運(yùn)行結(jié)果:j=0
j=1
j=3
j=6
j=10
j=15
3.3.2 while循環(huán)語(yǔ)句
格式:while (條件表達(dá)式)
循環(huán)語(yǔ)句塊
功能:先計(jì)算條件表達(dá)式,為true,則執(zhí)行循環(huán)語(yǔ)句塊,為false則跳出循環(huán)。
例:public class SC{
public static void main(String args[]) {
char c='a' ;
while(c<='e') {
System.out.print(c+" ") ;
c=(char)(c+1) ; }
} }
運(yùn)行結(jié)果:a b c d e
3.3.3 do…while循環(huán)語(yǔ)句
格式: do { 循環(huán)體 }
while(條件表達(dá)式) ;
注意:while后面的“;”
3.3.4 循環(huán)語(yǔ)句的嵌套
例:public class SC {
public static void main(String args[])
{ int i , j ;
for (i=1;i<=9;i++)
{ for (j=1;j<=9;j++)
System.out.print(i+"*"+j+"="+(i*j)+"\t");
System.out.println();}
} }
運(yùn)行結(jié)果:1*1=1 1*2=2…………1*9=9
2*1=2 2*2=4…………2*9=18
……………………
9*1=9 9*2=18…………9*9=81
3.3.5 循環(huán)語(yǔ)句小結(jié)
?。?)初始化部分:用來設(shè)置循環(huán)的一些初始條件,計(jì)數(shù)器清零等;
?。?)循環(huán)體部分:這是反復(fù)被執(zhí)行的一段代碼,可以是單語(yǔ)句,也可以是復(fù)合語(yǔ)句;
?。?)迭代部分:這是當(dāng)前循環(huán)結(jié)束,下一次循環(huán)開始時(shí)執(zhí)行的語(yǔ)句,常用來使計(jì)數(shù)器加1或減1;
?。?)終止部分:是一具布爾表達(dá)式,每一次循環(huán)要對(duì)該表達(dá)式求值,以驗(yàn)證是否滿足循環(huán)終止條件。
3.4 跳轉(zhuǎn)語(yǔ)句
Java支持3種跳轉(zhuǎn)語(yǔ)句:break , continue , return
3.4.1 break語(yǔ)句
格式:break ;
功能:(1)退出switch結(jié)構(gòu);
?。?)退出當(dāng)前一層循環(huán)。
例:見P51
3.4.2 帶標(biāo)號(hào)的break語(yǔ)句
格式:標(biāo)識(shí)符: //標(biāo)識(shí)符應(yīng)在break前面
……
break 標(biāo)識(shí)符 ;
功能:直接跳轉(zhuǎn)到標(biāo)識(shí)符處,可以退出多重循環(huán);
例:public class SC{
public static void main(String args[]) {
int i,j,k=0;
ABC: for(i=0,j=0;i<10 && j<20;i++,j+=5) {
for(;k<10;) {
k = k + 1;
break ABC; }
System.out.println("i = " + i + " j = " + j); }
System.out.println("Exit for loop==> i = " + i);
System.out.println("Exit for loop==> j = " + j);
System.out.println("Exit for loop==> k = " + k);
} }
運(yùn)行結(jié)果:Exit for loop==> i =0
Exit for loop==> j =0
Exit for loop==> k =1
若去除“break ABC;”語(yǔ)句運(yùn)行結(jié)果:
i=0 j=0
i=1 j=5
i=2 j=10
i=3 j=15
Exit for loop==> i =4
Exit for loop==> j =20
Exit for loop==> k =10
例: int i=3 j;
outer: while(i>0) {
j=3;
iner: while(j>0) {
if(j<2) break outer;
System.out.println(j+”and”+i);
j--;
} i-- ; }
3.4.3 continue語(yǔ)句
格式:continue ;
功能:只有用在循環(huán)結(jié)構(gòu)中,跳過循環(huán)體中尚未執(zhí)行的語(yǔ)句,重新開始下一輪循環(huán)。從循環(huán)體第一個(gè)語(yǔ)句開始執(zhí)行。
例:public class SC {
public static void main(String args[]) {
int m=0 ;
do { m++ ;
if(m/3==0) continue ; //去除此行語(yǔ)句則輸出5個(gè)“您好!”
System.out.println("您好!") ; }
while(m<5) ; } }
運(yùn)行結(jié)果:輸出3個(gè)“您好!”
3.4.4 帶標(biāo)號(hào)的continue語(yǔ)句
格式:標(biāo)識(shí)符:
……
continue 標(biāo)識(shí)符;
功能:用標(biāo)號(hào)標(biāo)出想跳到的語(yǔ)句,繼續(xù)重復(fù)執(zhí)行程序。
說明:“break 標(biāo)識(shí)符;”是結(jié)束循環(huán);“continue 標(biāo)識(shí)符;”是繼續(xù)循環(huán)。
例:P53
3.4.5 return語(yǔ)句
格式:return [表達(dá)式] ;
功能:返回調(diào)用的語(yǔ)句,執(zhí)行它的下一條語(yǔ)句,可以帶參數(shù)返回。
說明:當(dāng)方法用void聲明時(shí),說明不需要返回值(即返回類型為空),使用不帶參數(shù)return語(yǔ)句。不帶參數(shù)return語(yǔ)句可以省略。
例:public class SC {
public static int Mul( )
{ int m=1;
for (int i=1 ; i<=5; i++)
m=m*i;
return m; }
public static void main(String args[])
{ System.out.println("5!="+ Mul( )); } }
運(yùn)行結(jié)果:5!=120
作業(yè):P56 3-3
方法一:public class SC{
public static void main(String arg[]){
char c='A';
while(c<='E') {
switch(c)
{case 'A': System.out.println("A 等級(jí)的分?jǐn)?shù)段是90分以上");break;
case 'B': System.out.println("B 等級(jí)的分?jǐn)?shù)段是80~90分以上");break;
case 'C': System.out.println("C 等級(jí)的分?jǐn)?shù)段是70~80分以上");break;
case 'D': System.out.println("D 等級(jí)的分?jǐn)?shù)段是60~70分以上");break;
case 'E': System.out.println("E 等級(jí)的分?jǐn)?shù)段是60分以下");break; }
c++;}}}
方法二:import java.io.* ;
public class SC{
public static void main(String arg[]) throws IOException{
char c=(char)System.in.read();
// System.in.read( )只接受一個(gè)鍵盤輸入字符,且是int型
switch(c)
{case 'A': System.out.println("A 等級(jí)的分?jǐn)?shù)段是90分以上");break;
case 'B': System.out.println("B 等級(jí)的分?jǐn)?shù)段是80~90分以上");break;
case 'C': System.out.println("C 等級(jí)的分?jǐn)?shù)段是70~80分以上");break;
case 'D': System.out.println("D 等級(jí)的分?jǐn)?shù)段是60~70分以上");break;
case 'E': System.out.println("E 等級(jí)的分?jǐn)?shù)段是60分以下");break;
default : System.out.println("輸入等級(jí)錯(cuò)誤!"); }}}