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

正文內(nèi)容

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

2025-01-06 04:30本頁(yè)面
  

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