Java基礎(chǔ)教學課件六_第1頁
Java基礎(chǔ)教學課件六_第2頁
Java基礎(chǔ)教學課件六_第3頁
Java基礎(chǔ)教學課件六_第4頁
Java基礎(chǔ)教學課件六_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、java基礎(chǔ)課程內(nèi)容異常理解異常的概念運用 try 塊、catch 塊和 finally 塊處理異常運用多重 catch 塊處理異常運用嵌套 try/catch 塊處理異常運用關(guān)鍵字 throw 和 throws 處理異常運用JAVA編寫和使用自定義異常集合List,Set,MapProperties類什么是異常異常(Exception)是一種特殊的運行錯誤,是在程序運行過程中發(fā)生、會打斷程序正常執(zhí)行的錯誤。Java異常Java程序運行過程中所發(fā)生的異常事件可分為兩類:錯誤(Error):JVM系統(tǒng)內(nèi)部錯誤、資源耗盡等嚴重情況違例(Exception): 其它因編程錯誤或偶然的外在因素導致的一

2、般性問題,例如:對負數(shù)開平方根空指針訪問試圖讀取不存在的文件異常體系結(jié)構(gòu)ExceptionArithmeticExceptionNullPointerExceptionObjectThrowableErrorThreadDeathSQLExceptionRuntimeExceptionNumberFormatExceptionAWTError異常體系結(jié)構(gòu)Error類對象由Java虛擬機生成并拋出;無法恢復OutOfMerroyErrorException類對象由應用程序處理或拋出Exception編譯錯誤運行異常編譯錯誤編譯錯誤是由于所編寫的程序存在語法問題,未能通過有源代碼到目標代碼得的轉(zhuǎn)換

3、,這個錯誤可以簡單地有編譯系統(tǒng)查出來。checkedException運行時異常運行錯誤是在程序運行過程中產(chǎn)生的錯誤。如:nullPointerException ArrayIndexOutOfBoundsException.常見的異常 10文件結(jié)束EOFException找不到文件FileNotFoundExceptionI/O 異常的根類IOException字符串到 float 型數(shù)字的轉(zhuǎn)換無效NumberFormatException不能加載所需的類ClassNotFoundException方法接收到非法參數(shù)IllegalArgumentException數(shù)組大小小于或大于實際的數(shù)組

4、大小ArrayIndexOutOfBoundException嘗試訪問 null 對象成員NullPointerException許多 java.lang 異常的基類RuntimeException異常層次結(jié)構(gòu)的根類Exception算術(shù)錯誤情形,如以零作除數(shù)ArithmeticException線程中斷InterruptedException說 明異 常異常處理機制程序員通常只能處理違例(Exception),而對錯誤(Error)無能為力對于RuntimeException,通常不需要我們?nèi)ゲ东@,這類異常由Java運行系統(tǒng)自動拋出并自動處理。處理異常捕獲異常Try,catch,finall

5、y拋出異常Throws,throw捕獲異常捕獲異常是通過try-catch-finally語句實現(xiàn)的。try./可能產(chǎn)生違例的代碼catch( ExceptionName1 e )./當產(chǎn)生ExceptionName1型違例時的處置措施catch( ExceptionName2 e ). /當產(chǎn)生ExceptionName2型違例時的處置措施 finally. /無條件執(zhí)行的語句捕獲異常try 捕獲違例的第一步是用try語句塊選定捕獲違例的范圍。catch 在catch語句塊中是對違例對象進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產(chǎn)生的不同類型的違例對象。與

6、其它對象一樣,可以訪問一個違例對象的成員變量或調(diào)用它的方法。getMessage( ) 方法,用來得到有關(guān)異常事件的信息printStackTrace( )用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內(nèi)容。多重 catch一段代碼可能會生成多個異常當引發(fā)異常時,會按順序來查看每個 catch 語句,并執(zhí)行第一個類型與異常類型匹配的語句執(zhí)行其中的一條 catch 語句之后,其他的 catch 語句將被忽略 15try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) 多重 catch使用多重 catch 語句時,異常子類一定要位于異常父

7、類之前16try . catch(ArrayIndexOutOfBoundsException e) . catch(Exception e) 捕獲異常finally捕獲例外的最后一步是通過finally語句為例外處理提供一個統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會被執(zhí)行。finally語句是任選的如果try或者catch塊有return 指令,finally還是會被執(zhí)行,流程先跳到finally然后再回到return指令異常處理舉例(1)class ExceptionCatchpubli

8、c static void main(String args)int it=1,3,4;tryfor(int i=0;i=3;i+)System.out.println(iti);catch(ArrayIndexOutOfBoundsException e)System.out.println(oh my god! is wrong);異常處理塊的一般形式try / 要監(jiān)控錯誤的代碼塊 methodGeneratingException(); catch (Exception e) / Exception e 的異常處理程序 finally / 在 try 結(jié)束前要執(zhí)行的代碼塊 cleanup

9、();19拋出異常如果一個方法(中的語句執(zhí)行時)可能生成某種Exception,但是并不能確定如何處理這種違例,則此方法應聲明拋棄違例throws聲明異常表明該方法將不對這些違例進行處理,而由該方法的調(diào)用者負責處理實例throws異常聲明如果使用 throw異常是通過關(guān)鍵字 throw 拋出,程序可以用throw語句引發(fā)明確的異常。如: try if(flag0) throw new NullPointerException();throw語句的操作數(shù)一定是Throwable類類型或Throwable子類類型的一個對象。22使用 throws示例class ThrowsDemo static

10、void throwOne() throws IllegalAccessException System.out.println(在throwOne中.); throw new IllegalAccessException(非法訪問異常); public static void main(String args) try throwOne(); catch(IllegalAccessException e) System.out.println(捕獲+e); 23回顧重寫規(guī)則如果父類中的方法拋出多個異常,則子類中的覆蓋方法要么拋出相同的異常,要么拋出異常的子類,但不能拋出新的異常。自定義異常c

11、lass MyException extends Exception MyException(String reason)this.reason=reason;String reason;/public String getMessage()return reason;區(qū)別public String getReason()return reason;Collection(集合)集合是將多個元素組成一個單元的對象集合是將多個對象組合在一起,對這些對象進行存儲、檢索等操縱集合 JDK1.4 集合接口框圖這些類都保存在java.util包當中。集合Collection:集合層次中的根接口,JDK沒有

12、提供這個接口直接的實現(xiàn)類。List:是一個有序的集合,可以包含重復的元素ArrayList:可變的數(shù)組,元素允許重復LinkedList:針對經(jīng)常插入或者刪除中間元素所設(shè)計的高效率集合Set:不能包含重復的元素。SortedSet是一個按照升序排列元素的Set。TreeSet:以有序狀態(tài)保存并可防止重復Map:包含了key-value對。Map不能包含重復的keySortedMap是一個按照升序排列key的Map。Map接口和Collection接口沒有任何關(guān)系。ArrayList和LinkedList的比較ArrayList底層采用數(shù)組完成,而LinkedList則是以一般的雙向鏈表(dou

13、ble-linked list)完成,其內(nèi)每個對象除了數(shù)據(jù)本身外,還有兩個 引用,分別指向前一個元素和后一個元素。如果我們經(jīng)常在List的開始處增加元素,或者在List中進行插入和刪除操作,我們應該使用LinkedList,否則的話,使用ArrayList將更加快速。Vector和ArrayList的異同Vector和ArrayList的異同Vector類中所有的方法都是線程同步的,兩個線程并發(fā)訪問Vector對象是安全的,需要額外的監(jiān)視器檢查,運行效率低些。ArrayList類中所有的方法是非同步的,程序的效率比Vector高。hashtable 與 hashMap接口關(guān)系注:繼承使用的是直

14、線,實現(xiàn)使用的虛線。SortedSetSetListMapHashSet LinkedHashSetTreeSet ArrayList LinkedList SortedMapHashMap TreeMap ArrayList可變的數(shù)組實例范型化約束ArrayList中所要放元素的類別ArrayList lists=new ArrayList();排序Collections:工具類取最大和最小的元素:Collections.max()、Collections.min()。Collections類主要是對列表進行操作sort();實例sort()只接受Comparable對象的listCompa

15、rable什么是Comparablemarker接口API回憶String中的compareTo方法public int compareTo(User user)return userNpareTo(user.getUserName();對集合的遍歷forIterator迭代器(Iterator)的用法 Iterator接口定義了對Collection類型對象中所含元素的遍歷等增強處理功能可以通過Collection接口中定義的iterator()方法獲得一個對應的Iterator(實現(xiàn)類)對象Set (實現(xiàn)類)對象對應的Iterator仍然是無序的List(實現(xiàn)類)對象對應的ListIter

16、ator對象可以實現(xiàn)對所含元素的雙向遍歷: 使用next()方法和previous()方法Iterator接口用法舉例import java.util.*;public class Test public static void main(String args) ArrayList h = new ArrayList();h.add(1st);h.add(2nd);h.add(new Integer(3);h.add(new Double(4.0);Iterator it = h.iterator();while ( it.hasNext() ) System.out.println(it.

17、next();Set不允許重復HashSet對象相等Equalspublic boolean equals(Object aSong) Song song = (Song)aSong; return getTitle().equals(song.getTitle();Hashcodepublic int hashCode() reutrn title.hashCode();MapMap使用 成對的key和valueKey不能重復實例Properties類 類似HashMapKey,valueProperties類 import java.util.*;import java.io.*;clas

18、s PropTest public static void main(String args) Properties pps=new Properties(); try pps.load(new FileInputStream(d:perties); Enumeration em=pertyNames(); /枚舉類 while(em.hasMoreElements() String strKey=(String)em.nextElement(); /em.nextElement()返回Object類 String strValue=pps.getProperty(strKey); System.out.println(strKey+=+strValue); catch(Exception e) e.printStackTrace(); Stack棧(Stack)也是一種特殊的線性表,是一種后進先出(LIFO)的結(jié)構(gòu)。是限定僅在表尾進行插入和刪除運算的線性表,表尾稱為棧頂(top),表頭稱為棧底(bottom)。棧的物理存儲可以用順序存儲結(jié)構(gòu),也可以用鏈式存儲結(jié)構(gòu)。集合的使用集合的使用策略Iterator 優(yōu)先于Enumeration Vector:用ArrayList代替Vector。Hashtable:用HashMap代替Hashtable

溫馨提示

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

評論

0/150

提交評論