freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java程序設(shè)計與應(yīng)用開發(fā)第2版上ppt-資料下載頁

2025-01-06 04:30本頁面
  

【正文】 第 2版) 概 述 ? Java則在 C++基礎(chǔ)上建立了全新的異常處理機制。 ? Java運用面向?qū)ο蟮姆椒ㄟM行異常處理,把各種不同的異常進行分類,并提供了良好的接口。 ? 異常是用來應(yīng)對程序中可能發(fā)生的各種錯誤的一種強大的處理機制。 ? 要寫出友好、健壯的程序,靈活地運用 Java程序語言的異常處理機制,須從以下幾個方面來認識異常:拋出異常、捕獲異常以及處理異常。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 異 常 處 理 遭遇異常 在 Java 中,異常分為檢查的 (Checked)和未檢查的 (Unchecked)兩種類型。對于 Checked類型的異常,編譯器要求在方法中必須捕獲之或是聲明之;而對于 Unchecked類型的異常,編譯器并不強制方法捕獲或是聲明。 由于 FileNotFoundException和 IOException均屬于 Checked類型的異常,因而編譯器會強制要求捕獲之或是聲明之;而ArrayIndexOutOfBoundsException屬于 Unchecked類型的異常,因而編譯器并不會強制要求捕獲該異?;蚴锹暶髟摦惓?。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 捕獲并處理異常 通常使用下面的代碼框架來進行異常的捕獲與處理: try { ...//可能出現(xiàn)異常的代碼 } catch (...){//捕獲異常 ... //異常處理代碼 } 對于可能出現(xiàn)異常的代碼,使用一個 try塊將其包括起來。try塊中可以包含一條或是多條 Java語句。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 一個 try塊可以有多個對應(yīng)的 catch塊,用以捕獲不同類型的異常: try { ... } catch(ExceptionType1 name1 ) { ... } catch(ExceptionType2 name2) { ... } catch 子句的一般形式為: catch(ExceptionType exceptionName) { ... } catch子句中包含有唯一的參數(shù): ExceptionType exceptionName ExceptionType指明了 catch語句所能捕獲的異常類型, ExceptionType必須是一個繼承了 。當(dāng) catch語句捕獲一個異常時,將傳遞一個ExceptionType類型的對象進入 catch塊,該對象中包含了異常的全部信息,可以使用該對象中相應(yīng)的方法獲取異常信息 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 在 catch塊后,還可以跟隨 finally塊: ... try{ ... }catch(...){ ... }finally{ ... } ... 無論 try塊中是否出現(xiàn)異常, finally塊中的語句總是得到執(zhí)行。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) ? Java中的部分異常 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) Java的幾個特別重要的異常類 ? Throwable:所有異常的基類。 ? Error: Throwable的子類,代表一個嚴(yán)重的問題。例如: OutOfMemoryError代表 JVM的堆空間耗盡。 UnknownError代表 Java虛擬機中出現(xiàn)一個未知但嚴(yán)重的異常。 ? Exception: Throwable的另一個子類,代表一個普通的問題。例如: FileNotFoundException代表文件未找到。 SQLException代表有關(guān) JDBC的異常。 ? RuntimeException: Exception類的一個特殊的子類,可能在任何正常的操作中被拋出。例如: NullPointerException表示試圖引用 null對象的方法或?qū)傩浴? IndexOutOfBoundException表示數(shù)組越界的異常。在 C語言中沒有這樣的特性,往往會造成嚴(yán)重且難以發(fā)現(xiàn)的程序漏洞。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 聲明方法拋出異常 ? 然而,在有些情況下,僅根據(jù)當(dāng)前的條件還無法處理出現(xiàn)的異常,這時候,就應(yīng)該使用這樣的方法:聲明該方法會拋出異常;該方法的調(diào)用者來負責(zé)捕獲異常或是繼續(xù)拋出異常。 ? 聲明一個方法拋出異常,使用關(guān)鍵字 throws, throws緊跟在方法簽名之后??梢酝瑫r聲明方法拋出多個異常,多個異常之間使用逗號隔開。 ? throws關(guān)鍵字用來聲明方法拋出異常。在方法體中,如果需要顯式拋出一個異常,使用關(guān)鍵字 throw: throw aThrowableObject。 aThrowableObject必須是一個“可拋出”的對象,也就是必須是由Throwable或是其子類所生成的對象。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 異常的拋出策略 ? 當(dāng)程序拋出一個異常的時候,必須確保所有的異常“接收者”都收到有意義的信息。也就是說,必須選擇合適的異常類型,以便方法的調(diào)用者程序可以根據(jù)異常的類型來做出正確的處理;必須設(shè)置有意義的異常信息,以便看到異?;蛉罩居涗浀挠脩裟苊靼装l(fā)生了什么事;必須讓stacktrace反映出異常發(fā)生的最原始的位置信息。 ? 一個方法所聲明拋出的異常,是設(shè)計該方法時必須考慮的重要因素。程序員應(yīng)該站在方法調(diào)用者的立場去考慮這個問題,而不是站在書寫這個方法的開發(fā)者的立場。 ?哪些異常是對調(diào)用者有意義的?調(diào)用者可以方便地捕獲并處理這些異常。 ?哪些異常是調(diào)用者應(yīng)當(dāng)忽略的?調(diào)用者可以把這些異常傳遞給他們的調(diào)用者或用戶。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 不要聲明拋出所有異常 ? 聲明所有可能產(chǎn)生的異常,是極不明智的做法。因為會破壞方法的封裝性,將方法的內(nèi)部實現(xiàn)暴露接口中,從而限制了將來可能發(fā)生的改變。 ? 有的編程人員或許會使用另一種極端的情形:方法聲明拋出 Exception或 Throwable。這無異于上例中聲明拋出所有異常的情形,甚至更糟。聲明 Exception或 Throwable對于方法的調(diào)用者來說毫無指導(dǎo)意義。因此,調(diào)用這個方法的程序只能有兩種選擇的情形: ? 被迫捕獲 Exception或 Throwable。 ? 聲明拋出 Exception或 Throwable。那么該代碼的調(diào)用者又會順次受到牽連,形成惡性循環(huán)。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 異常聲明的數(shù)量 ? 在 Java語言規(guī)范中,對于一個方法聲明異常的數(shù)量沒有一個硬性的指標(biāo),但通常聲明較少的異常為好。 ? 一般來說,聲明 3個以上的異常通常代表著程序設(shè)計的問題: ?該方法做了太多的事情,應(yīng)該被拆分成多個小方法; ?聲明了太多的“低級異常”,應(yīng)該將這些“低級異?!庇成涞揭粋€“高級的異?!鳖愋椭校部梢栽诜椒ǖ膬?nèi)部自行消化這些異常。 ? 當(dāng)程序員在一個方法中拋出一個異常,即書寫一個 throws子句時,對于每一個想拋出的異常,首先要考慮: ?方法的調(diào)用者接收到這個異常后,能夠做些什么? ?方法的調(diào)用者是否能夠區(qū)分異常的不同類型,從而做出不同的處理? Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 保持 throws子句的穩(wěn)定性 ? 將多個“低級異?!庇成涞缴倭俊案呒壆惓!钡奶幚矸椒?,還有一個顯著的好處:它可以避免 throws子句隨著方法實現(xiàn)的改變而改變。 ? throws子句是方法定義中的重要部分,所以保持 throws子句的穩(wěn)定性是非常重要的。在設(shè)計方法的初期,就聲明方法拋出調(diào)用者所預(yù)期的異常,而不是在方法的實現(xiàn)階段根據(jù)當(dāng)前的實現(xiàn)方法來決定拋出何種異常。 ? 另外,在設(shè)計方法的定義時,將相關(guān)的異常組織成對象樹,只在方法中聲明父類異常,這是保持 throws子句穩(wěn)定性的好方法。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 異常拋出策略小結(jié) 關(guān)于異常拋出處理的策略結(jié)合本節(jié)內(nèi)容總結(jié)為以下 6條經(jīng)驗策略。 ? 從方法使用者的角度,而不是書寫該方法的開發(fā)者的角度來考慮,聲明對使用者有意義的異常。 ? 何時拋出異常 ——在所設(shè)計的方法遇到不能處理的非正常情形下,應(yīng)當(dāng)聲明拋出異常。 ? 不聲明所有可能發(fā)生的異常,要盡可能地將“低級異常”映射成對方法使用者有意義的“高級異?!薄? ? 不要聲明拋出“ Exception”或“ Throwable”,因為聲明拋出“超級異?!睂Ψ椒ㄊ褂谜邅碚f是毫無用處的,而且會導(dǎo)致極差的代碼風(fēng)格。 ? 一般不聲明拋出超過 3個的異常。如果發(fā)生這種情況,也要通過代碼重構(gòu)或?qū)⒍鄠€異常映射到一個通用的異常中來解決該問題,或者在方法內(nèi)部自行消化部分內(nèi)部異常。 ? 將異常組織成一個對象樹結(jié)構(gòu),有利于保持方法定義的穩(wěn)定性,同時也給方法的使用者提供了以不同粒度處理異常的自由。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 異常的捕獲策略 混淆的異常 代碼示例: 該代碼只是簡單地捕獲所有異常,并把它記錄在日志中而已。但是,有一點需要注意的是, RuntimeException是 Exception的子類,捕獲 Exception同樣會捕獲所有的 RuntimeException及其子類。 假如你想分別處理 ,由于這兩種異常都是,因而僅僅捕獲 IOException,就會出現(xiàn)混淆。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 代碼重構(gòu)的困難 ? 捕獲“超級異?!彼鶐淼牧硗庖粋€麻煩就是導(dǎo)致重構(gòu)代碼變得異常困難。 ? 為了讓項目能盡快完成,你將整個方法用一個巨大的 trycatch塊包裹起來,在方法的末尾捕獲所有的異常 。如此,就給自己和以后查看該代碼的人設(shè)置了一個陷阱 (trap)。過了一段時間,當(dāng)你對上面的代碼進行重構(gòu)時,你或許想把過長的方法分拆成兩個較小的方法。隨著對方法的拆分, trycatch塊也被分成了兩份。第一份 (方法 methodPart1())包含對 ()的調(diào)用,因而可能拋出SomeException;第二份 (方法 methodPart2())則沒有任何異常。但是編譯器并不會告訴你方法 methodPart2()中的 trycatch塊是多余的。程序員都很容易忽略此類問題,因為你無法依賴編譯時刻的檢查來自動發(fā)現(xiàn)這樣的問題。這個問題將使代碼變得臃腫,令人難以理解。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 捕獲超級異常的合理情形 ? 有的時候,捕獲 Exception或 Throwable也是十分合理的,例如: ?應(yīng)用程序中的最后一級錯誤處理程序。 ?應(yīng)用程序服務(wù)器中,不希望因為一個應(yīng)用的異常而導(dǎo)致整個應(yīng)用服務(wù)器的運行終止。 ?在調(diào)用外部可能帶有惡意代碼的情形下,如果要保持系統(tǒng)不崩潰和數(shù)據(jù)結(jié)構(gòu)的超級安全,那么就必須捕獲 管被拋出異常的實際類型。 ? 但是,在絕大多數(shù)的情況下,捕獲 Exception或 Throwable都是不需要的。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版) 異常捕獲策略小結(jié) 可以將異常捕獲的策略歸結(jié)為以下幾條。 ? 盡可能只捕獲指定的異常,而不是捕獲多個異常的公共父類,除非確信這個異常的所有子類對程序來說是沒有差別的,可以用同樣的方式來處理它們;同樣也要考慮該異常將來可能的擴展。只要有可能,就不要捕獲 。 ? 如果有多個指定的異常需要處理,可以多寫幾個 catch子句,或者捕獲多個異常的公共父類,只要不是 Exception或 Throwable就行。 ? 一般情況下不要捕獲 RuntimeException或 Error,也就是不要捕獲unchecked exception,除非這些異常并不代表程序或系統(tǒng)的錯誤。讓這些標(biāo)志著程序或系統(tǒng)錯誤的異常沿著調(diào)用棧,一直傳遞到最上層的嚴(yán)重錯誤處理程序中。 ? 重構(gòu)代碼時,仔細觀察因為代碼的改變而變得多余的 catch子句。因為編譯器并不是總能發(fā)現(xiàn)這類問題。 Java程序設(shè)計與應(yīng)用開發(fā)(第 2版)
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1