第3章java基礎(chǔ)_第1頁(yè)
第3章java基礎(chǔ)_第2頁(yè)
第3章java基礎(chǔ)_第3頁(yè)
第3章java基礎(chǔ)_第4頁(yè)
第3章java基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java語(yǔ)言程序設(shè)計(jì)(第2版)第 3 章 類中的方法Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)2目錄 3.1 方法的控制流程(分支:if、switch,循環(huán):while、for,自學(xué)) 3.2 異常處理簡(jiǎn)介 3.3 方法的重載(overloading) 3.4 在方法中執(zhí)行腳本 3.5 本章小結(jié)Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)3 輸入兩個(gè)整數(shù)比較大小輸入兩個(gè)整數(shù)比較大小3.1.1 if選擇結(jié)構(gòu)(續(xù))ex3_2.java3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)4 輸入兩個(gè)整數(shù)比較大小輸入兩個(gè)整數(shù)比較大小import java.io.*;public

2、class ex3_2 public static void main(String args)throws IOException int x,y; BufferedReader in = new BufferedReader( new InputStreamReader(System.in); System.out.println(Enter x and y:); x=(new Integer(in.readLine().intValue(); y=(new Integer(in.readLine().intValue(); if (x!=y) if (xy) System.out.pri

3、ntln(xy); else System.out.println(x= 90) grade = A; else if (testscore = 80) grade = B; else if (testscore = 70) grade = C; else if (testscore = 60) grade = D; else grade = F; System.out.println(Grade = + grade); 程序輸出:程序輸出:Grade = C3.1.1 if選擇結(jié)構(gòu)(續(xù))ifElseDemo.java3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)113.

4、1.2 switch選擇結(jié)構(gòu) switch語(yǔ)句是多分支的選擇結(jié)構(gòu)語(yǔ)句是多分支的選擇結(jié)構(gòu)switch (switch-expression) case value1: statements for case1; break; case value2: statements for case2; break; . case valueN: statements for caseN; break; default: statements for default case; break; 注意問(wèn)題注意問(wèn)題 switch-expression、常量值常量值value1到到valueN必須必須是整形或字符

5、型是整形或字符型 如果表達(dá)式的值和某個(gè)如果表達(dá)式的值和某個(gè)case后面的值相同,則從該后面的值相同,則從該case之后開(kāi)始執(zhí)行,直到之后開(kāi)始執(zhí)行,直到break語(yǔ)句為止語(yǔ)句為止 default是可有可無(wú)的,若沒(méi)有一個(gè)常量與表達(dá)式的值是可有可無(wú)的,若沒(méi)有一個(gè)常量與表達(dá)式的值相同,則從相同,則從default之后開(kāi)始執(zhí)行之后開(kāi)始執(zhí)行3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)12if if (i = (i = 1 1) ) statementA(); statementA(); else ifelse if (i = (i = 2 2) ) statementB(); st

6、atementB(); else ifelse if(i=(i=3 3)|(i=)|(i=4 4) ) statementC(); statementC(); else ifelse if (i = (i = 5 5) ) statementD(); statementD(); elseelse statementF(); statementF(); switchswitch (i) (i) casecase 1 1: : statementA();break;statementA();break; casecase 2 2: : statementB();break;statementB()

7、;break; casecase 3 3: : casecase 4 4: : statementC();break;statementC();break; casecase 5 5: : statementD();break;statementD();break; defaultdefault: statementF();: statementF(); 3.1.2 switch選擇結(jié)構(gòu)(續(xù))用switch代替if3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)13 用switch語(yǔ)句實(shí)現(xiàn)成績(jī)分類的功能 已知一個(gè)學(xué)生的分?jǐn)?shù),給出其分?jǐn)?shù)等級(jí)。90-100分為級(jí);80-89分為

8、B級(jí);70-79分為級(jí);60-69分為D級(jí);0-59分為E級(jí)。3.1.2 switch選擇結(jié)構(gòu)(續(xù))3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)14 用用switch語(yǔ)句實(shí)現(xiàn)成績(jī)分類的功能語(yǔ)句實(shí)現(xiàn)成績(jī)分類的功能public class Grade public static char gradeLevel(double g)int n = (int)Math.floor(g/10);switch (n) case 10: case 9 : return(A); case 8 : return(B); case 7 : return(C); case 6 : return

9、(D); default: return(E); 3.1.2 switch選擇結(jié)構(gòu)(續(xù))例3-33.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)15public static void main(String args) System.out.println(gradeLevel(100)=+gradeLevel(100); System.out.println(gradeLevel(95.5)=+gradeLevel(95.5); System.out.println(gradeLevel(88)=+gradeLevel(88); System.out.println(g

10、radeLevel(72)=+gradeLevel(72); System.out.println(gradeLevel(68.5)=+gradeLevel(68.5); System.out.println(gradeLevel(60)=+gradeLevel(60); System.out.println(gradeLevel(59.5)=+gradeLevel(59.5); System.out.println(gradeLevel(35)=+gradeLevel(35); 3.1.2 switch選擇結(jié)構(gòu)(續(xù))例3-33.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)

11、16 增強(qiáng)for循環(huán) Java 5的新特色 用來(lái)對(duì)數(shù)組或者集合對(duì)象進(jìn)行遍歷 語(yǔ)法格式如下:for (Type name : Array/Set) /body of the loop;3.1.3 for循環(huán)結(jié)構(gòu)(續(xù))3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)17 使用增強(qiáng)for循環(huán)打印星期一到星期天的英文名public class PrintDay public static void main(String args) String days = Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunda

12、y; for (String day : days) System.out.print(day + ); System.out.println(); 3.1.3 for循環(huán)結(jié)構(gòu)(續(xù))例3-53.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)18 循環(huán)接受并輸出從鍵盤(pán)輸入的字符,直到輸入的字符為回車(chē)為止char ch=a;while (ch!=n)System.out.println(ch);ch= (char)System.in.read() ; / 接收鍵盤(pán)輸入3.1.4 while循環(huán)結(jié)構(gòu)(續(xù))3.1 方法的控制流程Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)19 異常

13、處理異常處理 在進(jìn)行程序設(shè)計(jì)時(shí),要認(rèn)識(shí)到錯(cuò)誤的產(chǎn)生是不可在進(jìn)行程序設(shè)計(jì)時(shí),要認(rèn)識(shí)到錯(cuò)誤的產(chǎn)生是不可避免的。所謂錯(cuò)誤,是在程序運(yùn)行過(guò)程中發(fā)生的避免的。所謂錯(cuò)誤,是在程序運(yùn)行過(guò)程中發(fā)生的異常事件,這些事件的發(fā)生將阻止程序的正常運(yùn)異常事件,這些事件的發(fā)生將阻止程序的正常運(yùn)行行 如何處理錯(cuò)誤?把錯(cuò)誤交給誰(shuí)去處理?程序又該如何處理錯(cuò)誤?把錯(cuò)誤交給誰(shuí)去處理?程序又該如何從錯(cuò)誤中恢復(fù)?如何從錯(cuò)誤中恢復(fù)? 為了加強(qiáng)程序的魯棒性,為了加強(qiáng)程序的魯棒性,Java語(yǔ)言具有特定的語(yǔ)言具有特定的運(yùn)行錯(cuò)誤處理機(jī)制運(yùn)行錯(cuò)誤處理機(jī)制3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)203.2.1 異常處理的意

14、義 異常的基本概念異常的基本概念 又稱為例外,是特殊的運(yùn)行錯(cuò)誤對(duì)象又稱為例外,是特殊的運(yùn)行錯(cuò)誤對(duì)象 是面向?qū)ο笠?guī)范的一部分,是異常類的對(duì)象是面向?qū)ο笠?guī)范的一部分,是異常類的對(duì)象 Java中聲明了很多異常類,每個(gè)異常類都代表了一種運(yùn)中聲明了很多異常類,每個(gè)異常類都代表了一種運(yùn)行錯(cuò)誤,類中包含了行錯(cuò)誤,類中包含了 該運(yùn)行錯(cuò)誤的信息該運(yùn)行錯(cuò)誤的信息 處理錯(cuò)誤的方法處理錯(cuò)誤的方法 每當(dāng)每當(dāng)Java程序運(yùn)行過(guò)程中發(fā)生一個(gè)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),程序運(yùn)行過(guò)程中發(fā)生一個(gè)可識(shí)別的運(yùn)行錯(cuò)誤時(shí),即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都會(huì)產(chǎn)生一個(gè)即該錯(cuò)誤有一個(gè)異常類與之相對(duì)應(yīng)時(shí),系統(tǒng)都會(huì)產(chǎn)生一個(gè)相應(yīng)的該異常類的對(duì)象,即

15、產(chǎn)生一個(gè)異常相應(yīng)的該異常類的對(duì)象,即產(chǎn)生一個(gè)異常3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)21 java處理錯(cuò)誤的方法處理錯(cuò)誤的方法 拋出拋出(throw)異常異常 在方法的運(yùn)行過(guò)程中,如果發(fā)生了異常,則該方法生在方法的運(yùn)行過(guò)程中,如果發(fā)生了異常,則該方法生成一個(gè)代表該異常的對(duì)象并把它交給運(yùn)行時(shí)系統(tǒng),運(yùn)成一個(gè)代表該異常的對(duì)象并把它交給運(yùn)行時(shí)系統(tǒng),運(yùn)行時(shí)系統(tǒng)便尋找相應(yīng)的代碼來(lái)處理這一異常行時(shí)系統(tǒng)便尋找相應(yīng)的代碼來(lái)處理這一異常 捕獲捕獲(catch)異常異常 運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,從生成異常的方運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,從生成異常的方法開(kāi)始進(jìn)行回溯,直到找到

16、包含相應(yīng)異常處理的方法法開(kāi)始進(jìn)行回溯,直到找到包含相應(yīng)異常處理的方法為止為止3.2.1 異常處理的意義(續(xù))3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)22Method4Method3Method2Method1探測(cè)拋出異常捕獲處理異常調(diào)用3.2.1 異常處理的意義(續(xù))異常處理示意圖3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)23 Java異常處理機(jī)制的優(yōu)點(diǎn)異常處理機(jī)制的優(yōu)點(diǎn) 將錯(cuò)誤處理代碼從常規(guī)代碼中分離出來(lái)將錯(cuò)誤處理代碼從常規(guī)代碼中分離出來(lái) 按錯(cuò)誤類型和差別分組按錯(cuò)誤類型和差別分組 克服了傳統(tǒng)方法的錯(cuò)誤信息有限的問(wèn)題克服了傳統(tǒng)方法的錯(cuò)誤信息有限

17、的問(wèn)題3.2.1 異常處理的意義(續(xù))3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)243.2.2 錯(cuò)誤的概念 錯(cuò)誤錯(cuò)誤 程序運(yùn)行過(guò)程中發(fā)生的異常事件程序運(yùn)行過(guò)程中發(fā)生的異常事件 根據(jù)錯(cuò)誤的嚴(yán)重程度不同,可分為兩類根據(jù)錯(cuò)誤的嚴(yán)重程度不同,可分為兩類 錯(cuò)誤錯(cuò)誤 致命性的,用戶程序無(wú)法處理(不能修復(fù))致命性的,用戶程序無(wú)法處理(不能修復(fù)) Error類是所有錯(cuò)誤類的父類類是所有錯(cuò)誤類的父類 異常異常 非致命性的,可編制程序捕獲和處理非致命性的,可編制程序捕獲和處理 Exception類是所有異常類的父類類是所有異常類的父類3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉

18、,清華大學(xué)25 再對(duì)異常進(jìn)行分類 非檢查型異常非檢查型異常 不能期望程序捕獲的異常不能期望程序捕獲的異常(例如數(shù)組越界,除零等例如數(shù)組越界,除零等) 繼承自繼承自RuntimeException(系統(tǒng)級(jí)異常)(系統(tǒng)級(jí)異常) 在方法中不需要聲明,編譯器也不進(jìn)行檢查在方法中不需要聲明,編譯器也不進(jìn)行檢查 檢查型異常(檢查型異常(應(yīng)用程序級(jí)別的異常) 其他類型的異常其他類型的異常 如果被調(diào)用的方法拋出一個(gè)類型為如果被調(diào)用的方法拋出一個(gè)類型為E的檢查型異常,的檢查型異常,那么調(diào)用者必須捕獲那么調(diào)用者必須捕獲E或者也聲明拋出或者也聲明拋出E(或者或者E的的一個(gè)父類),對(duì)此編譯器要進(jìn)行檢查一個(gè)父類),對(duì)此

19、編譯器要進(jìn)行檢查3.2.2 錯(cuò)誤的概念(續(xù))3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)263.2 異常處理簡(jiǎn)介3.2.2 錯(cuò)誤的概念(續(xù))異常和錯(cuò)誤類的層次結(jié)構(gòu)Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)27 Java預(yù)定義的一些常見(jiàn)異常 ArithmeticException 整數(shù)除法中除數(shù)為整數(shù)除法中除數(shù)為0 NullPointerException 訪問(wèn)的對(duì)象還沒(méi)有實(shí)例化訪問(wèn)的對(duì)象還沒(méi)有實(shí)例化 NegativeArraySizeException 創(chuàng)建數(shù)組時(shí)元素個(gè)數(shù)是負(fù)數(shù)創(chuàng)建數(shù)組時(shí)元素個(gè)數(shù)是負(fù)數(shù) ArrayIndexOutOfBoundsException 訪問(wèn)

20、數(shù)組元素時(shí),數(shù)組下標(biāo)越界訪問(wèn)數(shù)組元素時(shí),數(shù)組下標(biāo)越界 ArrayStoreException 程序試圖向數(shù)組中存取錯(cuò)誤類型的數(shù)據(jù)程序試圖向數(shù)組中存取錯(cuò)誤類型的數(shù)據(jù) FileNotFoundException 試圖存取一個(gè)并不存在的文件試圖存取一個(gè)并不存在的文件 IOException 通常的通常的I/O錯(cuò)誤錯(cuò)誤非檢查型異常檢查型異常3.2 異常處理簡(jiǎn)介3.2.2 錯(cuò)誤的概念(續(xù))預(yù)定義的一些常見(jiàn)異常Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)28 測(cè)試系統(tǒng)定義的運(yùn)行異常測(cè)試系統(tǒng)定義的運(yùn)行異常數(shù)組越界出現(xiàn)的異常數(shù)組越界出現(xiàn)的異常import java.io.*;public class Hel

21、loWorld public static void main (String args ) int i = 0;String greetings = Hello world!, No, I mean it!, HELLO WORLD!;while (i 4) System.out.println (greetingsi); i+;3.2 異常處理簡(jiǎn)介3.2.2 錯(cuò)誤的概念(續(xù))例3-13Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)29 運(yùn)行結(jié)果運(yùn)行結(jié)果Hello world!No, I mean it!HELLO WORLD!Exception in thread main java.la

22、ng.ArrayIndexOutOfBoundsException at HelloWorld.main(HelloWorld.java:7) 說(shuō)明說(shuō)明 訪問(wèn)數(shù)組下標(biāo)越界,導(dǎo)致訪問(wèn)數(shù)組下標(biāo)越界,導(dǎo)致ArrayIndexOutOfBoundsException異常異常 該異常是系統(tǒng)定義好的類,對(duì)應(yīng)系統(tǒng)可識(shí)別的錯(cuò)誤,該異常是系統(tǒng)定義好的類,對(duì)應(yīng)系統(tǒng)可識(shí)別的錯(cuò)誤,所以所以Java虛擬機(jī)會(huì)自動(dòng)中止程序的執(zhí)行流程,并新虛擬機(jī)會(huì)自動(dòng)中止程序的執(zhí)行流程,并新建一個(gè)該異常類的對(duì)象,即拋出數(shù)組出界異常建一個(gè)該異常類的對(duì)象,即拋出數(shù)組出界異常3.2 異常處理簡(jiǎn)介3.2.2 錯(cuò)誤的概念(續(xù))例3-13運(yùn)行結(jié)果Jav

23、a語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)303.2.3 異常的處理 對(duì)于檢查型異常,對(duì)于檢查型異常,Java強(qiáng)迫程序必須進(jìn)行處理。強(qiáng)迫程序必須進(jìn)行處理。處理方法有兩種:處理方法有兩種: 聲明拋出異常聲明拋出異常 不在當(dāng)前方法內(nèi)處理異常,而是把異常拋出到調(diào)用方不在當(dāng)前方法內(nèi)處理異常,而是把異常拋出到調(diào)用方法中法中 捕獲異常捕獲異常 使用使用trycatch()塊,捕獲到所發(fā)生的異常,并進(jìn)塊,捕獲到所發(fā)生的異常,并進(jìn)行相應(yīng)的處理行相應(yīng)的處理3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)31 聲明拋出異常聲明拋出異常 如果程序員不想在當(dāng)前方法內(nèi)處理異常,可以使用如果程序員不想在當(dāng)

24、前方法內(nèi)處理異常,可以使用throws子句子句聲明將異常拋出到調(diào)用方法中聲明將異常拋出到調(diào)用方法中 在異常被拋出的過(guò)程中在異常被拋出的過(guò)程中, 任何方法都可以捕獲它并任何方法都可以捕獲它并進(jìn)行相應(yīng)的處理進(jìn)行相應(yīng)的處理3.2 異常處理簡(jiǎn)介3.2.2 錯(cuò)誤的處理聲明拋出異常Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)323.2.3 異常的處理(續(xù))一個(gè)例子public void openThisFile(String fileName) throws java.io.FileNotFoundException /code for method public void getCustomerInf

25、o() throws java.io.FileNotFoundException / do something this.openThisFile(customer.txt); / do something 如果在如果在openThisFile中拋出了中拋出了FileNotfoundException異常,異常,getCustomerInfo將將停止執(zhí)行,并將此異常傳送給它的調(diào)用者停止執(zhí)行,并將此異常傳送給它的調(diào)用者3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)33 語(yǔ)法格式語(yǔ)法格式try statement(s) catch (exceptiontype name) st

26、atement(s) finally statement(s)3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))捕獲異常Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)34 說(shuō)明說(shuō)明 try 語(yǔ)句語(yǔ)句 其后跟隨可能產(chǎn)生異常的代碼塊其后跟隨可能產(chǎn)生異常的代碼塊 catch語(yǔ)句語(yǔ)句 其后跟隨異常處理語(yǔ)句,通常用到兩個(gè)方法其后跟隨異常處理語(yǔ)句,通常用到兩個(gè)方法 getMessage() 返回一個(gè)字符串對(duì)發(fā)生的異常進(jìn)行描述。返回一個(gè)字符串對(duì)發(fā)生的異常進(jìn)行描述。 printStackTrace() 給出方法的調(diào)用序列,一直到異常的給出方法的調(diào)用序列,一直到異常的產(chǎn)生位置產(chǎn)生位置 finally語(yǔ)句語(yǔ)句 不論

27、在不論在try代碼段是否產(chǎn)生異常,代碼段是否產(chǎn)生異常,finally 后的程序代碼段都后的程序代碼段都會(huì)被執(zhí)行。通常在這里釋放內(nèi)存以外的其他資源會(huì)被執(zhí)行。通常在這里釋放內(nèi)存以外的其他資源 注意事項(xiàng)注意事項(xiàng) 在類層次樹(shù)中,一般的異常類型放在后面,特殊的放在在類層次樹(shù)中,一般的異常類型放在后面,特殊的放在前面前面3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))捕獲異常Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)35 讀入兩個(gè)整數(shù),第一個(gè)數(shù)除以第二個(gè)數(shù),之后輸出讀入兩個(gè)整數(shù),第一個(gè)數(shù)除以第二個(gè)數(shù),之后輸出import java.util.Scanner;public class Exception

28、Tester1 public static void main(String args) Scanner scan = new Scanner(System.in); System.out.println(Enter the first number:); int number1 = scan.nextInt(); System.out.println(Enter the second number:); int number2 = scan.nextInt(); System.out.print(number1 + / + number2 + =); int result = number1

29、 / number2; System.out.println(result); 3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))例3-14Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)36 運(yùn)行結(jié)果運(yùn)行結(jié)果Enter the first number:140Enter the second number:abcjava.lang.NumberFormatException: abc at java.lang.Integer.parseInt(Integer.java:426) at java.lang.Integer.valueOf(Integer.java:532) at Keyboard.

30、getInteger(Keyboard.java:10) at ExceptionTester.main(ExceptionTester.java:7)140 / 0=Exception in thread main java.lang.ArithmeticException: / by zero at ExceptionTester.main(ExceptionTester.java:10)3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))例3-14運(yùn)行結(jié)果Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)37 捕獲捕獲 NumberFormatException類型的異常類型的異常import

31、java.util.Scanner;public class ExceptionTester21 public static void main(String args) int number1 = 0, number2 = 0; Scanner scan = new Scanner(System.in); try System.out.println(Enter the first number:); number1 = Integer.valueOf(scan.nextLine().intValue(); System.out.println(Enter the second number

32、:); number2 = Integer.valueOf(scan.nextLine().intValue(); catch (NumberFormatException e) System.out.println(Those were not proper integers! I quit!); System.exit(-1); System.out.print(number1 + / + number2 + =); int result = number1 / number2; System.out.println(result); 3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))Jav

33、a語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)38 運(yùn)行結(jié)果運(yùn)行結(jié)果Enter the first number:abcThose were not proper integers! I quit!3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)39捕獲被零除的異常捕獲被零除的異常 ( ArithmeticException類型的異常類型的異常) import java.util.Scanner;public class ExceptionTester31 public static void main(String args) int number1

34、= 0, number2 = 0, result = 0; Scanner scan = new Scanner(System.in); try System.out.println(Enter the first number:); number1 = Integer.valueOf(scan.nextLine().intValue(); System.out.println(Enter the second number:); number2 = Integer.valueOf(scan.nextLine().intValue(); result = number1 / number2;

35、catch (NumberFormatException e) System.out.println(Invalid integer entered!); System.exit(-1); catch (ArithmeticException e) System.out.println(Second number is 0, cannot do division!); System.exit(-1); System.out.print(number1 + / + number2 + = + result); 3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)40 運(yùn)行結(jié)果運(yùn)行結(jié)

36、果Enter the first number:143Enter the second number:0Second number is 0, cannot do division!3.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))例3-16運(yùn)行結(jié)果Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)41 對(duì)程序進(jìn)行改進(jìn):重復(fù)提示輸入,直到輸入合法的數(shù)據(jù)。為了避免代碼對(duì)程序進(jìn)行改進(jìn):重復(fù)提示輸入,直到輸入合法的數(shù)據(jù)。為了避免代碼重復(fù),可將數(shù)據(jù)存入數(shù)組重復(fù),可將數(shù)據(jù)存入數(shù)組import java.util.Scanner;public class ExceptionTester41 public sta

37、tic void main(String args) int result; int number = new int2; boolean valid; Scanner scan = new Scanner(System.in); for (int i = 0; i 2; i+) valid = false; while (!valid) try System.out.println(Enternumber + (i + 1); numberi =Integer.valueOf(scan.nextLine().intValue(); valid = true; catch (NumberFor

38、matException e) System.out.println(Invalid integer entered. Please try again.); 3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)42 try result = number0 / number1; System.out.print(number0 + / + number1 + = + result); catch (ArithmeticException e) System.out.println(Second number is 0, cannot do division!); 3.2 異常處

39、理簡(jiǎn)介3.2.3 異常的處理(續(xù))例3-17Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)43 運(yùn)行結(jié)果運(yùn)行結(jié)果Enter number 1abcInvalid integer entered. Please try again.Enter number 1efgInvalid integer entered. Please try again.Enter number 1143Enter number 2abcInvalid integer entered. Please try again.Enter number 240143 / 40=33.2 異常處理簡(jiǎn)介3.2.3 異常的處理(續(xù))

40、例3-17Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)443.2.4 生成異常對(duì)象 生成異常對(duì)象生成異常對(duì)象 三種方式三種方式 由由Java虛擬機(jī)生成虛擬機(jī)生成 由由Java類庫(kù)中的某些類生成類庫(kù)中的某些類生成 在程序中生成自己的異常對(duì)象,也即是異??梢圆皇浅鲥e(cuò)產(chǎn)生,在程序中生成自己的異常對(duì)象,也即是異常可以不是出錯(cuò)產(chǎn)生,而是人為地拋出而是人為地拋出 生成異常對(duì)象都是通過(guò)生成異常對(duì)象都是通過(guò)throw語(yǔ)句實(shí)現(xiàn),生成的異常對(duì)象語(yǔ)句實(shí)現(xiàn),生成的異常對(duì)象必須是必須是Throwable或其子類的實(shí)例或其子類的實(shí)例 throw new ThrowableObject(); ArithmeticExce

41、ption e = new ArithmeticException(); throw e;throw:語(yǔ)句拋出一個(gè)異常語(yǔ)句拋出一個(gè)異常throws:方法拋出一個(gè)異常方法拋出一個(gè)異常3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)45 生成異常對(duì)象舉例生成異常對(duì)象舉例class ThrowTest public static void main(String args) try throw new ArithmeticException(); catch(ArithmeticException ae) System.out.println(ae); try throw new

42、ArrayIndexOutOfBoundsException(); catch(ArrayIndexOutOfBoundsException ai) System.out.println(ai); try throw new StringIndexOutOfBoundsException(); catch(StringIndexOutOfBoundsException si) System.out.println(si); 3.2 異常處理簡(jiǎn)介3.2.3 生成異常對(duì)象 (續(xù))例3-18Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)46 運(yùn)行結(jié)果運(yùn)行結(jié)果java.lang.ArithmeticE

43、xceptionjava.lang.ArrayIndexOutOfBoundsExceptionjava.lang.StringIndexOutOfBoundsException3.2 異常處理簡(jiǎn)介3.2.3 生成異常對(duì)象 (續(xù))例3-18運(yùn)行結(jié)果Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)473.2.5 聲明自己的異常類 聲明自己的異常類聲明自己的異常類 除使用系統(tǒng)預(yù)定義的異常類外,用戶還可聲明自己除使用系統(tǒng)預(yù)定義的異常類外,用戶還可聲明自己的異常類的異常類 自定義的所有異常類都必須是自定義的所有異常類都必須是Exception的子類的子類 一般的聲明方法如下一般的聲明方法如下public

44、 class MyExceptionName extends SuperclassOfMyException public MyExceptionName() super(Some string explaining the exception); 3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)48 聲明當(dāng)除數(shù)為零時(shí)拋出的異常類聲明當(dāng)除數(shù)為零時(shí)拋出的異常類DivideByZeroExceptionpublic class DivideByZeroException extends ArithmeticException public DivideByZeroExceptio

45、n() super(Attempted to divide by zero); 3.2 異常處理簡(jiǎn)介3.2.5 聲明自己的異常類 (續(xù))例3-19Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)49import java.util.Scanner;public class DivideByZeroExceptionTester private static int quotient(int numerator, int denominator) throws DivideByZeroException if (denominator = 0) throw new DivideByZeroExce

46、ption(); return(numerator / denominator); public static void main(String args) Scanner scan = new Scanner(System.in); int number1=0, number2=0, result=0; try System.out.println(Enter the first number:); number1 = Integer.valueOf(scan.nextLine().intValue(); System.out.println(Enter the second number:

47、); number2 = Integer.valueOf(scan.nextLine().intValue(); result = quotient(number1,number2); 3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)50catch (NumberFormatException e) System.out.println(Invalid integer entered!); System.exit(-1); catch (DivideByZeroException e) System.out.println(e.toString(); System.exit(

48、-1); System.out.println(number1 + / + number2 + = + result); 3.2 異常處理簡(jiǎn)介Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)51 運(yùn)行結(jié)果如下運(yùn)行結(jié)果如下Enter the first number:140Enter the second number:0DivideByZeroException: Attempted to divide by zero3.2 異常處理簡(jiǎn)介3.2.5 聲明自己的異常類 (續(xù))例3-19運(yùn)行結(jié)果Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)523.3 方法重載 方法重載方法重載 一個(gè)類中名字相同的多

49、個(gè)方法一個(gè)類中名字相同的多個(gè)方法 這些方法的參數(shù)必須不同,這些方法的參數(shù)必須不同,Java可通過(guò)參數(shù)列可通過(guò)參數(shù)列表的不同來(lái)辨別重載的方法表的不同來(lái)辨別重載的方法 或者參數(shù)個(gè)數(shù)不同或者參數(shù)個(gè)數(shù)不同 或者參數(shù)類型不同或者參數(shù)類型不同 返回值可以相同,也可以不同返回值可以相同,也可以不同 重載的價(jià)值在于它允許通過(guò)使用一個(gè)方法名來(lái)重載的價(jià)值在于它允許通過(guò)使用一個(gè)方法名來(lái)訪問(wèn)多個(gè)方法訪問(wèn)多個(gè)方法Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)53 通過(guò)方法重載分別接收一個(gè)或幾個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)通過(guò)方法重載分別接收一個(gè)或幾個(gè)不同數(shù)據(jù)類型的數(shù)據(jù)class MethodOverloading public

50、void receive(int i)System.out.println(Receive one int parameter. );System.out.println(i=+i);public void receive(double d)System.out.println(Receive one double parameter. );System.out.println(d=+d);public void receive(String s)System.out.println(Receive one String parameter. );System.out.println(s=+s

51、);3.3 方法重載3.3 方法重載 (續(xù))例3-20Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)54 public void receive(int i,int j)System.out.println(Receive two int parameters. );System.out.println(i= + i + j= + j);public void receive(int i,double d)System.out.println(Receive one int parameter and one double parameter. );System.out.println(i=

52、+ i + d= + d);public class Examp3_17 public static void main(String args)MethodOverloading m = new MethodOverloading();m.receive(2);m.receive(5.6);m.receive(3,4);m.receive(7,8.2);m.receive(Is it fun?);3.3 方法重載3.3 方法重載 (續(xù))例3-20Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)55 運(yùn)行結(jié)果運(yùn)行結(jié)果Receive one int parameter.i=2Receive one

53、 double parameter.d=5.6Receive two int parameters.i=3 j=4Receive one int parameter and one double parameter.i=7 d=8.2Receive one String parameter.s=Is it fun?3.3 方法重載3.3 方法重載 (續(xù))例3-20運(yùn)行結(jié)果Java語(yǔ)言程序設(shè)計(jì)(第2版),鄭莉,清華大學(xué)563.5 本章小結(jié) 本章內(nèi)容本章內(nèi)容 Java程序中類方法的控制結(jié)構(gòu),包括順序、分支及循環(huán)程序中類方法的控制結(jié)構(gòu),包括順序、分支及循環(huán)三種基本結(jié)構(gòu)三種基本結(jié)構(gòu) Java的異常處理機(jī)制,包括對(duì)錯(cuò)誤的分類方法,如何拋的異常處理機(jī)制,包括對(duì)錯(cuò)誤的分類方法,如何拋出異常、捕獲異常出異常、捕獲異常 方法的重載方法的重載 本章要求本章要求 掌握三種流程控制語(yǔ)法,并熟練應(yīng)用掌握三種流程控制語(yǔ)法,并熟練應(yīng)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論