因爲JSP 的useBean需要用JAVA語言來實現,然後編譯成CLASS文件放(fàng)入TOMCAT的BIN目錄下(xià)。所以在這裏我(wǒ)(wǒ)們一(yī)同學習一(yī)下(xià)JAVA的程序流: 與C、 C++相同,Java程序通過流控制來執行程序流,完成一(yī)定任務的語句組成的。語句可以是單一(yī)的一(yī)條語句(如c=a+b;),也可以複合語句。 下(xià)面我(wǒ)(wǒ)們分(fēn)别來介紹Java中(zhōng)的流控制語句,包括 分(fēn)支語句 :if-else,break,switch, return. 循環語句 :while,do-while,for, continue. 例外(wài)處理語句 :try-catch-finally,throw 最後我(wǒ)(wǒ)們簡單介紹一(yī)下(xià)注釋語句 分(fēn)支語句 分(fēn)支語句提供了一(yī)種控制機制,使得程序的執行可以跳過某些語句不執行,而轉去(qù)執行特定的語句。 條件語句if-else. if-else語句根據判定條件的真假來執行兩種操作中(zhōng)的一(yī)種,格式爲: if(boolean-expression) statement1; [else statement2;] 1.布爾表達式boolean-expression是任意一(yī)個返回布爾型數據的達式(這比C、 C++的限制要嚴格)。
2.每個單一(yī)的語句後都必須有分(fēn)号。 3.語句statement1,statement2可以爲複合語句,這時要用大(dà)括号{}。建議對單一(yī)的語句也用大(dà)括号括起,這樣程序的可讀性強,而且有利于程序的擴充(可以在其中(zhōng)填加新的語句)。{}外(wài)面不加分(fēn)号。 4.else子句是任選的。 5.若布爾表達式的值爲true,則程序執行statement1,否則執行statement2。 6.if-else語句的一(yī)種特殊形式爲: if(expression1){ statement1 }else if (expression2){ statement2 }…… }else if (expressionM){ statementM }else { statementN } [else子句不能單獨作爲語句使用,它必須和if配對使用。else總是與離(lí)它最近的if配對。可以通過使用大(dà)括号{}來改變配對關系。] 7.舉例: 比較兩個數的大(dà)小(xiǎo),并按從小(xiǎo)到大(dà)的次序輸出。 public class CompareTwo{ public static void main( String args[] ){ double d1=23.4; double d2=35.1; if(d2>=d1) System.out.println(d2+" >= "+d1); else System.out.println(d1+" >= "+d2); } } 運行結果爲: C:\>java CompareTwo 35.1 >= 23.4 例.判斷某一(yī)年是否爲閏年。
閏年的條件是符合下(xià)面二者之一(yī):①能被4整除,但不能被100整除;②能被4整除,又(yòu)能被100整除。 public class LeapYear{ public static void main( String args[] ){ int year=1989; //method 1 if( (year%4==0 && year%100!=0) || (year%400==0) ) System.out.println(year+" is a leap year."); else System.out.println(year+" is not a leap year."); year=2000; //method 2 boolean leap; if( year%4!=0 ) leap=false; else if( year%100!=0 ) leap=true; else if( year%400!=0 ) leap=false; else leap=true; if( leap==true ) System.out.println(year+" is a leap year."); else System.out.println(year+" is not a leap year."); year=2050; //method3 if( year%4==0){ if( year%100==0 ){ if( year%400==0) leap=true; else leap=false; }else leap=false; }else leap=false; if( leap==true ) System.out.println(year+" is a leap year."); else System.out.println(year+" is not a leap year."); } } 運行結果爲 C:\>java LeapYear 1989 is not a leap year. 2000 is a leap year. 2050 is not a leap year. 該例中(zhōng),方法1用一(yī)個邏輯表達式包含了所有的閏年條件,方法2使用了if-else語句的特殊形式,方法3則通過使用大(dà)括号{}對if-else進行匹配來實現閏年的判斷。大(dà)家可以根據程序來對比這三種方法,體(tǐ)會其中(zhōng)的聯系和區别,在不同的場合選用适合的方法。
多分(fēn)支語句switch switch語句根據表達式的值來執行多個操作中(zhōng)的一(yī)個,它的般格式如下(xià): switch (expression){ casevalue1:statement1; break; casevalue2:statement2; break; ………… casevalueN:statemendN; break; [default:defaultStatement;] } 1.表達式expression可以返回任一(yī)簡單類型的值(如整型、實數型、字符型),多分(fēn)支語句把表達式返回的值與每個case子句中(zhōng)的值相比。如果匹配成功,則運行該case子句後的語句序列。
2.case子句中(zhōng)的值values必須是常量,而且所有case子句中(zhōng)的值是不同的。 3.default子句是任選的。當表達式的值與任一(yī)case子句中(zhōng)的都不匹配時,程序執行default後面的語句。如果表達式的值與任一(yī)case子句中(zhōng)的值都不匹配且沒有default子句,則程序不作任何操作,而是直接跳出switch語句。 4.break語句用來在執行完一(yī)個case分(fēn)支後,使程序跳出switch語句,即終止switch語句的執行。因爲case子句隻是起到一(yī)個标号的作用,用來查找匹配的入口,從此處開(kāi)始執行,對後面的case子句不再進行匹配,而是直接執行其後的語句序列,因此該在每個case分(fēn)支後,要用break來終止後面的case分(fēn)支語句的執行。 在一(yī)些特殊情況下(xià),多個不同的case值要執行一(yī)組相同的操作,這時可以不用break。 5.case分(fēn)支中(zhōng)包括多個執行語句時,可以不用大(dà)括号{}括起。 6.switch語句的功能可以用if-else來實現,但在某些情況下(xià),使switch語句更簡煉,可讀性強,而且程序的執行效率提高。 7.舉例: 例.根據考試成績的等級打印出百分(fēn)制分(fēn)數段。 public class GradeLevel{ public static void main( String args[] ){ System.out.println("\n** first situation **"); char grade='C'; //normal use switch( grade ){ case 'A' : System.out.println(grade+" is 85~100"); break; case 'B' : System.out.println(grade+" is 70~84"); break; case 'C' : System.out.println(grade+" is 60~69"); break; case 'D' : System.out.println(grade+" is <60"); break; default : System.out.println("input error"); } System.out.println("\n** second situation **"); grade='A'; ∥creat error without break statement switch( grade ){ case 'A' : System.out.println(grade+" is 85~100"); case 'B' : System.out.println(grade+" is 70~84"); case 'C' : System.out.println(grade+" is 60~69"); case 'D' : System.out.println(grade+" is <60"); default : System.out.println("input error"); } System.out.println("\n** third situation **"); grade='B'; ∥several case with same operation switch( grade ){ case 'A' : case 'B' : case 'C' : System.out.println(grade+" is >=60"); break; case 'D' : System.out.println(grade+" is <60"); break; default : System.out.println("input error"); } } } 運行結果爲 C:\>java GradeLevel **** first situation **** C is 60~69 **** second situation **** A is 85~100 A is 70~84 A is 60~69 A is <60 input error **** third situation **** B is >=60 從該例中(zhōng)我(wǒ)(wǒ)們可以看到break語句的作用。 break語句
1.在switch語中(zhōng),break語句用來終止switch語句的執行。使程序switch語句後的第一(yī)個語句開(kāi)始執行。 2.在Java中(zhōng),可以爲每個代碼塊加一(yī)個括号,一(yī)個代碼塊通常用大(dà)括号{}括起來的一(yī)段代碼。加标号的格式如下(xià): BlockLabel:{codeBlock} break語句的第二種使用情況就是跳出它所指定的塊,并從緊挨該塊的第一(yī)條語句處執行。其格式爲: break BlockLabel; 例如: a:{……//标記代碼塊a b:{……//标記代碼塊b c:{……//标記代碼塊c break b; …… //willnotbeexecuted } …… //willnotbeexecuted } …… //willnotbeexecuted } …… /executefromhere } 3.與C、 C++不同,Java中(zhōng)沒有goto語句來實現任意的跳轉,因爲goto語句破壞程序的可讀性,而且影響編譯的優化。但是從上例可以看出,Java用break來實現goto語句所特有的一(yī)些優點。如果break後所指定的标号不是一(yī)個代碼塊的标号,而是一(yī)個語句,則這時break完全實現goto的功能。不過應該避免這種方式的使用。
返回語句return
return語句從當前方法中(zhōng)退出,返回到調用該方法的語句處,繼續程序的執行。返回語句有兩種格式: 1.return expression
返回一(yī)個值給調用該方法的語句,返回值的數據類型必須用方法聲明中(zhōng)的返回值類型一(yī)緻。可以使用強制類型轉換來使類型一(yī)緻。 2.return 當方法說明中(zhōng)用void聲明返回類型爲空時,應使用這種格式,不返回任何值。 return語句通常用在一(yī)個方法體(tǐ)的最後,以退出該方法并返一(yī)個值。Java中(zhōng),單獨的return語句用在一(yī)個方法體(tǐ)的中(zhōng)間時,會産生(shēng)編譯錯誤,因爲這時有一(yī)些語句執行不到。但 可以通過把return語句嵌入某些語句(如if-else)來使程序在未執行完方法中(zhōng)的所有語句時退出,例如: int method (int num) { ∥ return num; ∥will cause compile time error if (num>0) return num; …… ∥ may or may not be executed ∥depending on the value of num 循環語句
循環語句的作用是反複執行一(yī)段代碼,直到滿足終止循環條件爲止,一(yī)個循環一(yī)般應包括四部分(fēn)内容: 1.初始化部分(fēn)(initialization):用來設置循環的一(yī)些初始條件,計數器清零等。 2.循環體(tǐ)部分(fēn)(body):這是反複循環的一(yī)段代碼,可以是單一(yī)一(yī)條語句,也可以是複合語句。 3.叠代部分(fēn)(iteration):這是在當前循環結束,下(xià)一(yī)次循環開(kāi)始執行的語句,常常用來使計數器加1或減1。 4.終止部分(fēn)(termination):通常是一(yī)個布爾表達式,每一(yī)次循環要對該表達式求值,以驗證是否滿足循環終止條件。 Java中(zhōng)提供的循環語句有:while語句,do-while語句和for語句,下(xià)分(fēn)别介紹。 while語句
while語句實現"當型"循環,它的一(yī)般格式爲; [initialization] while (termination){ body; [iteration;] } 1.當布爾表達式(termination)的值爲true時,循環執行大(dà)括号中(zhōng)語句。并且初始化部分(fēn)和叠代部分(fēn)是任選的。
2.while語句首先計算終止條件,當條件滿足時,才去(qù)執行循環當中(zhōng)的語句。這是"當型"循環的特點。 do-while語句
do-while語句實現"直到型"循環,它的一(yī)般格式爲: [initialization] do{ body; [iteration;] }while (termination); 1.do-while語句首先執行循環體(tǐ),然後計算終止條件,若結果爲true,則循環執行大(dà)括号中(zhōng)的語句,直到布爾表達式的結果爲false。
2.與while語句不同的是,do-while語句的循環體(tǐ)至少執行一(yī)次,這是"直到型"循環的特點。 for語句
for語句也用來實現"當型"循環,它的一(yī)般格式爲: for(initialization;termination; iteration){ body; } 1.for語句執行時,首先執行初始化操作,然後判斷終止條件否滿足,如果滿足,則執行循環體(tǐ)中(zhōng)的語句,最後執行叠代部分(fēn)。完成一(yī)次循環後,重新判斷終止條件。 2.可以在for語句的初始化部分(fēn)聲明一(yī)個變量,它的作用域爲一(yī)個for語句。 3.for語句通常用來執行循環次數确定的情況(如對數組元素進行操作),也可以根據循環結束條件執行循環次數不确定的情況。 4.在初始化部分(fēn)和叠代部分(fēn)可以使用逗号語句,來進行多個操作。逗号語句是用逗号分(fēn)隔的語句序列。例如: for(i=0,j=10;i<j;i++, j--){ …… } 5.初始化、終止以及叠代部分(fēn)都可以爲空語句,三者均爲空的時候,相當于一(yī)個無限循環。 continue語句
1.continue語句用來結束本次循環,跳過循環體(tǐ)中(zhōng)下(xià)面尚未執的語句,接着進行終止條件的判斷,以決定是否繼續循環。對于for語句,在進行終止條件判斷前,還要先執行叠代 語句。它的格式爲: continue; 2.也可以用continue跳轉到括号指明的外(wài)層循環中(zhōng),這時的格爲 continue outerLable; 例 如 : outer: for( int i=0; i<10; i++ ){ ∥外(wài)層循環 for( int j=0; j<20; j++ ){ ∥内層循環 if( j>i ){ …… continue outer; } …… } …… } 該例中(zhōng),當滿足j>i的條件時,程序執行完相應的語句後跳轉到外(wài)層循環,執行外(wài)層循環的叠代語句i++;然後開(kāi)始下(xià)一(yī)次循環。
舉例 下(xià)例分(fēn)别用while、 do-while和for語句實現累計求和。 public class Sum{ public static void main( String args[] ){ System.out.println("\n** while statement **"); int n=10,sum=0; ∥initialization while( n>0 ){ ∥termination sum+=n; ∥body n--; ∥iteration } System.out.println("sum is "+sum); System.out.println("\n** do_while statement **"); n=0; ∥initialization sum=0; do{ sum+=n; ∥body n++; ∥iteration }while( n<=10 ); ∥termination System.out.println("sum is "+sum); System.out.println("\n** for statement **"); sum=0; for( int i=1; i<=10; i++){ ∥initialization,termination,iteration sum+=i; } System.out.println("sum is "+sum); } } 運行結果爲: C:\>javaSum **whilestatement** sumis55 **do_whilestatement** sumis55 **forstatement** sumis55 可以從中(zhōng)來比較這三種循環語句,從而在不同的場合選擇合适的語句。 例4.5求100~200間的所有素數 public class PrimeNumber{ public static void main( String args[] ){ System.out.println(" ** prime numbers between 100 and 200 **"); int n=0; outer:for(int i=101;i<200;i+=2){ ∥outer loop int k=15; ∥select for convinence for(int j=2;j<=k;j++){ ∥inner lop if( i%j==0 ) continue outer; } System.out.print(" "+i); n++; ∥output a new line if( n<10 ) ∥after 10 numbers continue; System.out.println(); n=0; } System.out.println(); } } 運行結果爲: C:\>java PrimeNumber ** prime numbers between 100 and 200 ** 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 該例通過一(yī)個嵌套的for語句來實現。 例外(wài)處理語句 例外(wài)處理語句包括try、catch、finally以及throw語句。舉例說明: String chax=(String) session.getValue("cha1"); //String yonghub=request.getParameter("yonghub"); int pageLine=8; int totalRec=0; int totalSub=0; int intPage=1; int i; if (request.getParameter("page")!=null) intPage=Integer.parseInt(request.getParameter("page")); try{ ResultSet countrs=null; countrs=workM6.executeQuery("select count(*) as cnt from wujml where wujbt like '%' + '"+chax+"' + '%' and wenjbs is null"); if (countrs.next()) totalRec=countrs.getInt("cnt"); countrs.close(); //stmt.close(); } catch (Exception e){ e.printStackTrace(); } 注釋語
Java中(zhōng)可以采用三種注釋方式: 1∥ 用于單行注釋。注釋從∥開(kāi)始,終止于行尾。 2/*…*/用于多行注釋。注釋從/*開(kāi)始,到*/結束,且這種注釋不能互相嵌套。 3/**…*/是Java所特有的doc注釋。它以/**開(kāi)始,到*/結束。這種注釋主要是爲支持JDK工(gōng)具javadoc而采用的。javadoc能識别注釋中(zhōng)用标記@标識的一(yī)些特殊變量,并把doc注釋加入它所生(shēng)成的HTML文件。
|