Java語言程序設計(自考)課件 第三章流程控制語句_第1頁
Java語言程序設計(自考)課件 第三章流程控制語句_第2頁
Java語言程序設計(自考)課件 第三章流程控制語句_第3頁
Java語言程序設計(自考)課件 第三章流程控制語句_第4頁
Java語言程序設計(自考)課件 第三章流程控制語句_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章流程控制語句

學習目標了解Java程序結構,理解包的概念,掌握package語句及import語句的用法掌握Java各主要語句的語法格式,能夠指出簡單程序的功能,給出運行結果,能夠編寫簡單的Java程序,能夠處理簡單的輸入輸出了解Java中異常處理的概念及處理機制,掌握try、catch、finally、throw和throws的使用方法Java程序的結構12簡單的輸入輸出3流程控制處理異常4本章主要內容第一節(jié)Java程序的結構整體來看,Java程序的結構如下:package語句:零個或1個,必須放在文件開始;import語句:零個或多個,必須放在所有類定義之前;公有的(public)類定義:零個或一個;類定義:零個或多個;接口定義:零個或多個;源文件命名時,若文件中含有public類,源文件必須與該類名字一致,注意區(qū)分大小寫Java包的概念

包是類的容器,包的設計人員利用包來劃分名字空間,用于分隔類名空間,以避免類名沖突.沒有包定義的源代碼文件成為未命名的包中的一部分,在未命名的包中的類不需要寫包標識符

使用package指明源文件中的類屬于哪個具體的包。包語句的格式為:

packagepkg1[.pkg2[.pkg3...]];Java包的概念package語句一定是源文件中的第一條可執(zhí)行語句,它的前面只能有注釋或空行。一個文件中最多只能有一條package語句

包的名字有層次關系,各層之間以點分隔。包層次必須與Java開發(fā)系統(tǒng)的文件系統(tǒng)結構相同。通常包名中全部用小寫字母

一個包可以包含若干個類文件,還可包含若干個包。一個包要放在指定目錄下,通常用classpath指定搜尋包的路徑。包名本身對應一個目錄(用一個目錄表示)Java包的概念packagejava.awt.image;在Windows系統(tǒng)下,此文件必須存放在java\awt\image目錄下;如果在unix系統(tǒng)下,文件須放在java/awt/image目錄下。此定義語句說明當前的編譯單元是包java.awt.image的一部分,文件中的每一個類名前都有前綴java.awt.image,因此不再會有重名問題

引入語句使用MyClass類,或mypackage包中的其它public類,則需要使用使用全名

mypackage.MyClassm=newmypackage.MyClass();先使用import語句引入所需要的類,程序中無需再使用全名

importmypackage.*;//…MyClassm=newMyClass();

packagemypackage;publicclassMyClass{ //…}

引入語句import語句只用來將其他包中的類引入當前名字空間中,程序中不需再引用同一個包或該包的任何元素,而當前包總是處于當前名字空間中

引入語句的格式如下importpkg1[.pkg2[.pkg3...]].(類名|*)“*”表示引入所有類語句次序示例正確的語句序列:錯誤的語句順序:packageTransportation;importjava.awt.Graphics;importjava.applet.Applet;importjava.awt.Graphics;importjava.applet.Applet;packageTransportation;該例中在包說明語句之前含有其他語句語句次序示例錯誤的語句順序:packageTransportation;packageHouse;importjava.applet.Applet;該例中含有兩個包說明語句第二節(jié)流程控制語句與表達式每個表達式都會得到一個值,即表達式的計算結果。語句也會有一個值,但這個值并不是語句的計算結果,而是執(zhí)行結果語句是Java的最小執(zhí)行單位,語句間以分號(;)作為分隔符。語句分為簡單語句及復合語句簡單語句就是通常意義下的一條語句,即單語句;而復合語句是一對花括號“{”和“}”括起來的語句組,也稱為“塊”,塊后沒有分號賦值語句表達式可當作一個值賦給某個變量,有的表達式也可當作語句方法調用通常返回一個值,一般用在表達式中。有的方法調用可直接當作語句System.out.println("HelloWorld!");customer1=newCustomer();point2=newPoint();x=12;x++;塊塊是一對花括號“{”和“}”括起來的語句組。例如:方法體是一個塊。塊還用在流控制的語句中,如if語句、switch語句及循環(huán)語句{}{ Pointpoint1=newPoint(); intx=point1.x;}分支語句分支語句共有兩種:if語句和switch語句if語句是單重選擇,最多只有兩個分支。if語句的基本格式是:if(邏輯表達式)

語句1;[else

語句2;]分支語句if關鍵字之后的邏輯表達式必須得到一個邏輯值,不能象其他語言那樣以數值來代替。因為Java不提供數值與邏輯值之間的轉換intx=3;if(x){...}if(x!=0)if語句常見的形式形式一:形式二:if(邏輯表達式){ //邏輯表達式為true時要執(zhí)行的語句;}if(邏輯表達式){ //邏輯表達式為true時要執(zhí)行的語句;}else{ //邏輯表達式為false時要執(zhí)行的語句;}if語句常見的形式三形式三(if語句的嵌套):if(邏輯表達式1){ //邏輯表達式1為true時要執(zhí)行的語句;}elseif(邏輯表達式2){ //邏輯表達式1為false,但邏輯表達式2為true時要執(zhí)行的語句;}…else{ //前面的邏輯表達式全為false時要執(zhí)行的語句;}if語句1 if(firstVal==0)2 if(secondVal==1)3 firstVal++;4 else5 firstVal--;if語句else子句屬于邏輯上離它最近的if語句

if(firstVal==0) if(secondVal==1) firstVal++; else firstVal--;這兩個匹配if語句1 if(firstVal==0){2 if(secondVal==1)3 firstVal++;4 }5 else6 firstVal--;這兩個匹配switch語句switch語句含義與嵌套的if語句是類似的switch(表達式){ casec1:

語句組1; break; …… caseck:

語句組k; break; [default:

語句組; break;]}switch語句表達式的計算結果必須是int型或字符型,即是int型賦值相容的。當用byte、short或char類型時,要進行提升。switch語句不允許使用浮點型或long型表達式。c1、c2、…、ck是int型或字符型常量。default子句是可選的,并且,最后一個break語句完全可以不寫。switch語句例1 //colorNum是整型變量2 switch(colorNum){3 case0:4 setBackground(Color.red);5 break;6 case1:7 setBackground(Color.green);8 break;9 default:10 setBackground(Color.black);11 break;12 }switch語句switch語句和if語句可以互相代替前一個示例用if語句實現(xiàn):if(colorum==0) setBackground(Color.red);elseif(colorNum==1) setBackground(Color.green); else setBackground(Color.black);例3.7使用if語句:staticintdaysInMonth(intmonth){ if(month<=0||month>12) return-1; //表示月份的數值不合理 if(month==2) return28; if((month==4)||(month==6)||(month==9)||(month==11)) return30; return31;}使用switch語句:staticintdaysInMonth(intmonth){ intdays; if(month<=0||month>12)return-1;//表示月份的數值不合理 switch(month){ case2: days=28;break; case4:case6:case9:case11: days=30;break; default: days=31; } returndays;}分支語句程序3.1當主程序執(zhí)行時,如果第一個命令行參數的首字符分別是數字、小寫字母及大寫字母時,系統(tǒng)會顯示這個首字符。如果輸入的是非數字或字母,則顯示不是數字或字母。輸出如圖所示分支語句如果上述方法中的最后一個break語句(第32行)不寫的話,程序執(zhí)行完第30、31行后將不停止,一直執(zhí)行下去。程序的輸出如圖3-6所示:循環(huán)語句三種循環(huán)語句:for語句、while語句和do-while語句for語句語法格式:for語句的語義是先執(zhí)行初始語句,判斷邏輯表達式的值,當邏輯表達式為真時,執(zhí)行循環(huán)體語句,執(zhí)行迭代語句,然后再去判別邏輯表達式的值。直到邏輯表達式的值為假時,循環(huán)結束

for(初始語句;邏輯表達式;迭代語句) 語句;循環(huán)語句例3.8的程序共執(zhí)行3次第2行的輸出語句(i為0,1,2時)。當i等于3時,邏輯表達式的值為假,退出循環(huán),執(zhí)行第4行語句for(inti=0;i<3;i++){ System.out.println("Areyoufinishedyet?");}System.out.println("Finally!");Areyoufinishedyet?Areyoufinishedyet?Areyoufinishedyet?Finally!循環(huán)語句for(;;) System.out.println("Alwaysprint!");該語句等價于for(;true;) System.out.println("Alwaysprint!");這段循環(huán)不會停止循環(huán)語句下面是初始語句及迭代語句包含多個語句時的情況:例3.9intsumi=0,sumj=0;for(inti=0,j=0;j<10;i++,j++){ sumi+=i; sumj+=j;}增強for語句在Java的新版本中,提供了另一種形式的for語句,稱為增強for語句,也稱為for-each語句它對數組的所有元素提供順序訪問,而不能像基本的for語句那樣可以提供多樣化的處理程序中定義了一維整數數組 intmyTable[]={23,45,65,34,21,67,78};則for-each語句for(intelement:myTable)System.out.print(element+"");將輸出數組中的全部7個元素,各元素之間以三個空格分隔while循環(huán)while循環(huán)for語句中常常用循環(huán)控制變量顯式控制循環(huán)的執(zhí)行次數。當程序中不能明確地指明循環(huán)的執(zhí)行次數時,可以僅用邏輯表達式來決定循環(huán)的執(zhí)行與否。這樣的循環(huán)可用while語句來實現(xiàn)while循環(huán)的語法是:while(邏輯表達式)

語句;和if語句一樣,while語句中的邏輯表達式亦不能用數值來代替循環(huán)語句while語句的語義:計算邏輯表達式,當邏輯表達式為真時,重復執(zhí)行循環(huán)體語句,直到邏輯表達式為假時結束。如果第一次檢查時邏輯表達式為假,則循環(huán)體語句一次也不執(zhí)行。如果邏輯表達式始終為真,則循環(huán)不會終止循環(huán)語句for語句可以改寫為while語句示例inti=0;while(i<3){ System.out.println("Areyoufinishedyet?"); i++;}System.out.println("Finally!");do-while循環(huán)do-while語句與while語句很相似。它把while語句中的邏輯表達式移到循環(huán)體之后。

do-while語句的語法格式是:do-while語句的語義是:首先執(zhí)行循環(huán)體語句,然后判定邏輯表達式的值,當表達式為真時,重復執(zhí)行循環(huán)體語句,直到表達式為假時結束。不論邏輯表達式的值是真是假,do循環(huán)中的循環(huán)體都至少執(zhí)行一次do

語句;while(邏輯表達式);循環(huán)語句示例例3.111 //do-while語句

2 inti=0;3 do{4 System.out.println("Areyoufinishedyet?");5 i++;6 }while(i<3);7 System.out.println("Finally!");循環(huán)語句for、while及do-while語句可互相替代例如:do

語句1;while(邏輯表達式);等價于:語句1;while(邏輯表達式)

語句1;跳轉語句Java語言不再提供對有爭議的goto語句的支持,也就是程序中不能再寫goto語句。Java提供了break和continue語句標號標號可以放在for、while或do-while語句之前,其語法格式為:

標號:語句;break語句break語句可用于三類語句中一類是switch語句中,一類是for、while及do-while等循環(huán)語句中,還有一類是塊語句中在switch語句及循環(huán)語句中break的語義是跳過本塊中余下的所有語句,轉到塊尾,執(zhí)行其后的語句for(inti=0;i<100;i++){ if(i==5) break; System.out.println("i="+i);}break語句break語句的第三種使用方法是和標號結合使用,其語義是跳出標號所標記的語句塊,繼續(xù)執(zhí)行其后的語句。多用于嵌套塊中,控制從內層塊跳到外層塊之后。其語法格式為:break標號;intx=20;out:for(i=2;i<10;i++){ System.out.println("begini="+i); while(x<1000){ System.out.println("i="+i+",x="+x); if(i*x>=80)breakout; elsex+=5; }}System.out.println("afteroutblock");break與continue程序3.2continue語句在循環(huán)語句中,continue可以立即結束當次循環(huán)而執(zhí)行下一次循環(huán),當然執(zhí)行前先判斷循環(huán)條件是否滿足continue語句也可以和標號一起使用,立即結束標號標記的那重循環(huán)的當次執(zhí)行,開始下一次循環(huán)。多用于多重循環(huán)中。

其語法格式為:continue標號;例3.13例3.13添加必要的代碼,執(zhí)行結果:*******************************************************第三節(jié)簡單的輸入/輸出Scanner類Scanner類屬于java.util包。它提供了許多方法,可用來方便地讀入不同類型的輸入值。要調用Scanner類的方法,必須先創(chuàng)建一個對象。下面的說明創(chuàng)建了一個Scanner類對象,它讀入鍵盤輸入:Scannerscan=newScanner(System.in);程序3.3和3.4程序3.3程序3.3中的Echo程序,讀入用戶鍵入的一行文本,將它保存到字符串變量message中,并回顯在屏幕上。第1行的import語句,表明程序中要使用Scanner類程序3.4簡單的輸入/輸出NumberFormat類和DecimalFormat類用于格式化輸出NumberFormat類提供對數值進行格式化操作的一般功能。不能使用new運算符實例化一個NumberFormat對象。DecimalFormat類按慣例使用new運算符來實例化對象。程序3.5和3.6程序3.5程序3.6第四節(jié)處理異常Java語言把程序運行中可能遇到的錯誤分為兩類,一類是非致命性的,通過某種修正后程序還能繼續(xù)執(zhí)行。這類錯誤稱作異常(Exception)。如打開一個文件時,發(fā)現(xiàn)文件不存在。又比如除零溢出、數組越界等。使用異常機制的情況當方法因為自身無法控制的原因而不能完成其任務文件不存在,網絡連接無法建立等處理在方法、類庫、類中拋出的異常如FileInputStream.read產生IOException;

在大的項目中采用統(tǒng)一的方式處理異常時編寫文字處理器一類的程序等;不經常發(fā)生但卻可能發(fā)生的故障

異常及其處理機制預定義了Exception類。在Exception類中定義了程序產生異常的條件簡化了代碼的編寫。常見的異常也可以統(tǒng)一處理,提高了效率,代碼重用率高允許程序員自己編寫特殊的異常處理程序,以滿足更獨特的需要異常機制的優(yōu)點把異常處理代碼從常規(guī)代碼中分離出來,增加了可讀性,方便修改按異常類型和差別進行分組,即從預定義的類Exception中派生自己的子類,對無法預測的異常也可以進行捕獲和處理,克服了傳統(tǒng)方法中錯誤信息有限的問題異常的處理借助于調用堆棧按先近后遠的原則進行拋出和捕獲

方法的運行過程中,如果發(fā)生了異常,稱程序產生了一個異常事件,相應地生成異常對象。生成異常對象并把它提交給運行時系統(tǒng)的這一過程稱為拋出(throw)異常

異常發(fā)生時,Java運行時系統(tǒng)從生成對象的代碼塊開始進行回溯,找到包含相應異常處理的方法,并把異常對象交給該方法處理,這一過程稱為捕獲(catch)異常分類在Java中主要有三類異常。類java.lang.Throwable是使用異常處理機制可被拋出并捕獲的所有異常對象的父類。它有三個基本子類,圖示如下ExceptionErrorRuntimeExceptionThrowable每個類使用的目的

Error表示很難恢復的錯誤,如內存越界。交給系統(tǒng)處理為好RuntimeException用來表示設計或實現(xiàn)方面的問題,如數組越界等。因為設計和實現(xiàn)正確的程序不會引發(fā)這類異常,所以常常不處理它發(fā)生這類異常時,運行時環(huán)境會輸出一條信息,提示用戶修正錯誤其他異常表示運行時因環(huán)境的影響可能發(fā)生并可被處理的問題。如文件沒找到或不完整的URL等。程序員處理它們異常分類異常分為以下三組:受檢異常,必須被處理運行時異常,不需要處理錯誤,不需要處理異常分類受檢異常受檢異常(checkedexception)是程序執(zhí)行期間發(fā)生的嚴重事件的后果運行時異常運行時異常(runtimeexception)通常是程序中邏輯錯誤的結果錯誤錯誤(error)是標準類Error或其后代類的一個對象異常傳播方式method1method2method3method4探測拋出例外傳遞捕獲處理例外調用異常處理

try,catch和finally語句

try{ //此處為拋出具體異常的代碼}catch(ExceptionType1e){ //拋出ExceptionType1異常時要執(zhí)行的代碼}catch(ExceptionType2e){ //拋出ExceptionType2異常時要執(zhí)行的代碼...}catch(ExceptionTypeke){ //拋出ExceptionTypek異常時要執(zhí)行的代碼}finally{ //必須執(zhí)行的代碼}

公共異常ArithmeticException整數除法中,如果除數為0,則發(fā)生該類異常NullPointerException

訪問沒有實例化的對象或調用它的方法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論