国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

第7章 異常

2019-11-14 11:52:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

7.1異常概述

1.所有異常的父類是?所有異常都在哪個(gè)包里?所有異常分為幾種類型?

java 語(yǔ)言定義了一些異常類在java.lang 標(biāo)準(zhǔn)包中。

所有的異常類是從 java.lang.Exception 類繼承的子類。

Exception 類是Throwable 類的子類。除了Exception類外,Throwable還有一個(gè)子類Error 。

Java 程序通常不捕獲錯(cuò)誤。錯(cuò)誤一般發(fā)生在嚴(yán)重故障時(shí),它們?cè)贘ava程序處理的范疇之外。

Error 用來(lái)指示運(yùn)行時(shí)環(huán)境發(fā)生的錯(cuò)誤。

例如,JVM 內(nèi)存溢出。一般地,程序不會(huì)從錯(cuò)誤中恢復(fù)。

異常類有兩個(gè)主要的子類:IOException 類和 RuntimeException 類。

在 Java 內(nèi)置類中,有大部分常用檢查性和非檢查性異常。

1.   從編程角度異常又分為哪兩種?各自的含義及常用異常類有哪些?

通常,Java的異常(包括Exception和Error)分為可查的異常(checked exceptions)和不可查的異常(uncheckedexceptions)。

     可查異常(編譯器要求必須處置的異常):正確的程序在運(yùn)行中,很容易出現(xiàn)的、情理可容的異常狀況。可查異常雖然是異常狀況,但在一定程度上它的發(fā)生是可以預(yù)計(jì)的,而且一旦發(fā)生這種異常狀況,就必須采取某種方式進(jìn)行處理。

     除了RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常。這種異常的特點(diǎn)是Java編譯器會(huì)檢查它,也就是說(shuō),當(dāng)程序中可能出現(xiàn)這類異常,要么用try-catch語(yǔ)句捕獲它,要么用throws子句聲明拋出它,否則編譯不會(huì)通過。

     不可查異常(編譯器不要求強(qiáng)制處置的異常):包括運(yùn)行時(shí)異常(RuntimeException與其子類)和錯(cuò)誤(Error)。

    Exception 這種異常分兩大類運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常(編譯異常)。程序中應(yīng)當(dāng)盡可能去處理這些異常。

      運(yùn)行時(shí)異常:都是RuntimeException類及其子類異常,如NullPointerException(空指針異常)、IndexOutOfBoundsException(下標(biāo)越界異常)等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯(cuò)誤引起的,程序應(yīng)該從邏輯角度盡可能避免這類異常的發(fā)生。

      運(yùn)行時(shí)異常的特點(diǎn)是Java編譯器不會(huì)檢查它,也就是說(shuō),當(dāng)程序中可能出現(xiàn)這類異常,即使沒有用try-catch語(yǔ)句捕獲它,也沒有用throws子句聲明拋出它,也會(huì)編譯通過。

      非運(yùn)行時(shí)異常 (編譯異常):是RuntimeException以外的異常,類型上都屬于Exception類及其子類。從程序語(yǔ)法角度講是必須進(jìn)行處理的異常,如果不處理,程序就不能編譯通過。如IOException、SQLException等以及用戶自定義的Exception異常,一般情況下不自定義檢查異常。

3.Java的異常處理機(jī)制有幾種?

在 Java 應(yīng)用程序中,異常處理機(jī)制為:拋出異常,捕捉異常。

7.2 捕獲異常

1.異常捕獲的語(yǔ)句有哪些?異常捕獲的目的是什么?如何捕獲異常?

捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(exception handler)。

捕獲異常:try、catch 和 finally

try 塊:用于捕獲異常。其后可接零個(gè)或多個(gè)catch塊,如果沒有catch塊,則必須跟一個(gè)finally塊。

catch 塊:用于處理try捕獲到的異常。

finally 塊:無(wú)論是否捕獲或處理異常,finally塊里的語(yǔ)句都會(huì)被執(zhí)行。當(dāng)在try塊或catch塊中遇到return語(yǔ)句時(shí),finally語(yǔ)句塊將在方法返回之前被執(zhí)行。

如何釋放物理資源?

Close

1.   什么情況下,finally語(yǔ)句塊會(huì)執(zhí)行,什么情況下不會(huì)執(zhí)行?

當(dāng)程序執(zhí)行try塊,catch塊時(shí)遇到return語(yǔ)句或者throw語(yǔ)句,這兩個(gè)語(yǔ)句都會(huì)導(dǎo)致該方法立即結(jié)束,所以系統(tǒng)并不會(huì)立即執(zhí)行這兩個(gè)語(yǔ)句,而是去尋找該異常處理流程中的finally塊,如果沒有finally塊,程序立即執(zhí)行return語(yǔ)句或者throw語(yǔ)句,方法終止。如果有 finally塊,系統(tǒng)立即開始執(zhí)行finally塊,只有當(dāng)finally塊執(zhí)行完成后,系統(tǒng)才會(huì)再次跳回來(lái)執(zhí)行try塊、catch塊里的 return或throw語(yǔ)句,如果finally塊里也使用了return或throw等導(dǎo)致方法終止的語(yǔ)句,則finally塊已經(jīng)終止了方法,不用 再跳回去執(zhí)行try塊、catch塊里的任何代碼了。

在以下4種特殊情況下,finally塊不會(huì)被執(zhí)行:

1)在finally語(yǔ)句塊中發(fā)生了異常。

2)在前面的代碼中用了System.exit()退出程序。

3)程序所在的線程死亡。

4)關(guān)閉CPU。

 

3.try、catch、finally、throw、throws的作用分別是什么?多catch語(yǔ)句之間的執(zhí)行順序?

使用 try 和 catch 關(guān)鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發(fā)生的地方。

try/catch代碼塊中的代碼稱為保護(hù)代碼,使用 try/catch 的語(yǔ)法如下:

try

{

   //程序代碼

}catch(ExceptionName e1)

{

  //Catch 塊

}

Catch 語(yǔ)句包含要捕獲異常類型的聲明。當(dāng)保護(hù)代碼塊中發(fā)生一個(gè)異常時(shí),try 后面的 catch 塊就會(huì)被檢查。

如果發(fā)生的異常包含在 catch 塊中,異常會(huì)被傳遞到該 catch 塊,這和傳遞一個(gè)參數(shù)到方法是一樣。

 

一個(gè) try 代碼塊后面跟隨多個(gè)catch 代碼塊的情況就叫多重捕獲。

多重捕獲塊的語(yǔ)法如下所示:

try{

   //程序代碼

}catch(異常類型1 異常的變量名1){

  // 程序代碼

}catch(異常類型2 異常的變量名2){

  // 程序代碼

}catch(異常類型2 異常的變量名2){

  // 程序代碼

}

上面的代碼段包含了 3 個(gè) catch塊。

可以在 try 語(yǔ)句后面添加任意數(shù)量的catch 塊。

如果保護(hù)代碼中發(fā)生異常,異常被拋給第一個(gè) catch 塊。

如果拋出異常的數(shù)據(jù)類型與 ExceptionType1 匹配,它在這里就會(huì)被捕獲。

如果不匹配,它會(huì)被傳遞給第二個(gè) catch 塊。

如此,直到異常被捕獲或者通過所有的 catch 塊。

 

如果一個(gè)方法沒有捕獲一個(gè)檢查性異常,那么該方法必須使用 throws 關(guān)鍵字來(lái)聲明。throws 關(guān)鍵字放在方法簽名的尾部。

也可以使用 throw 關(guān)鍵字拋出一個(gè)異常,無(wú)論它是新實(shí)例化的還是剛捕獲到的。

下面方法的聲明拋出一個(gè) RemoteException 異常:

import java.io.*;public class className{ public void deposit(double amount) throws RemoteException  {   // Method implementation   throw new RemoteException();  } //Remainder of class definition}

一個(gè)方法可以聲明拋出多個(gè)異常,多個(gè)異常之間用逗號(hào)隔開。

 

finally 關(guān)鍵字用來(lái)創(chuàng)建在try 代碼塊后面執(zhí)行的代碼塊。

無(wú)論是否發(fā)生異常,finally 代碼塊中的代碼總會(huì)被執(zhí)行。

在 finally 代碼塊中,可以運(yùn)行清理類型等收尾善后性質(zhì)的語(yǔ)句。

finally 代碼塊出現(xiàn)在catch 代碼塊最后,語(yǔ)法如下:

try{

  // 程序代碼

}catch(異常類型1 異常的變量名1){

  // 程序代碼

}catch(異常類型2 異常的變量名2){

  // 程序代碼

}finally{

  // 程序代碼

}

7.3拋出異常

1.什么是拋出異常?什么情況下需要拋出異常?拋出異常后如何處理?

拋出異常:當(dāng)一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建異常對(duì)象并交付運(yùn)行時(shí)系統(tǒng),異常對(duì)象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。

拋出異常:throw、 throws

7.4自定義異常

1.如何自定義異常?自定義的異常如何處理?

編寫自己的異常類時(shí)需要記住下面的幾點(diǎn)。

所有異常都必須是 Throwable 的子類。

如果希望寫一個(gè)檢查性異常類,則需要繼承 Exception 類。

如果你想寫一個(gè)運(yùn)行時(shí)異常類,那么需要繼承 RuntimeException 類。

可以像下面這樣定義自己的異常類:

class MyException extends Exception{

}

只繼承Exception 類來(lái)創(chuàng)建的異常類是檢查性異常類。

一個(gè)異常類和其它任何類一樣,包含有變量和方法。

7.5集合概述

1.什么是集合? Java中常用的集合有哪幾類?集合中用來(lái)存放什么?集合與數(shù)組的區(qū)別?

集合類存放于java.util包中。

集合類存放的都是對(duì)象的引用,而非對(duì)象本身,出于表達(dá)上的便利,我們稱集合中的對(duì)象就是指集合中對(duì)象的引用(reference)。

集合類型主要有3種:set(集)、list(列表)和map(映射)。

 

通俗的說(shuō),集合就是一個(gè)放數(shù)據(jù)的容器,準(zhǔn)確的說(shuō)是放數(shù)據(jù)對(duì)象引用的容器。

一、數(shù)組聲明了它容納的元素的類型,而集合不聲明。

    二、數(shù)組是靜態(tài)的,一個(gè)數(shù)組實(shí)例具有固定的大小,一旦創(chuàng)建了就無(wú)法改變?nèi)萘苛恕6鲜强梢詣?dòng)態(tài)擴(kuò)展容量,可以根據(jù)需要?jiǎng)討B(tài)改變大小,集合提供更多的成員方法,能滿足更多的需求。

    三、數(shù)組不論是效率還是類型檢查都是最好的。

1.數(shù)組是大小固定的,一旦創(chuàng)建無(wú)法擴(kuò)容;集合大小不固定,

2.數(shù)組的存放的類型只能是一種,集合存放的類型可以不是一種(不加泛型時(shí)添加的類型是Object);

3.數(shù)組是java語(yǔ)言中內(nèi)置的數(shù)據(jù)類型,是線性排列的,執(zhí)行效率或者類型檢查(不懂),都是最快的.

 ArrayList就是基于數(shù)組創(chuàng)建的容器類.

2.各類集合中元素存與取的特點(diǎn)?如何定義一個(gè)集合?

List 有序,可重復(fù)。Set 無(wú)序,唯一

Map(雙列集合)

    A:Map集合的數(shù)據(jù)結(jié)構(gòu)僅僅針對(duì)鍵有效,與值無(wú)關(guān)。

    B:存儲(chǔ)的是鍵值對(duì)形式的元素,鍵唯一,值可重復(fù)。

 

7.6集合類

1.List接口的實(shí)現(xiàn)方式?如何定義一個(gè)list集合?

6.List集合的特點(diǎn)?7.List集合中常用的方法有哪些?

 

List:、有順序以線性方式存儲(chǔ),可以存放重復(fù)對(duì)象

ArrayList:

底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組;所以它查詢快,增刪慢!

線程不安全,但是效率高!

Vector:

底層的數(shù)據(jù)結(jié)構(gòu)是數(shù)組;所以它查詢快,增刪慢!

線程安全,但是效率低!

LinkList:

底層的數(shù)據(jù)結(jié)構(gòu)是鏈表,所以它查詢慢,但是增刪快!

線程不安全,但是效率高!

 

7.7集合工具類

1.集合的工具類有哪些?

1. 類Collections 是集合框架的工具類,其中的方法都是靜態(tài)方法。 2. 調(diào)用某個(gè)方法直接利用類名調(diào)用即可,如Collections.sort(list1);。

 

8、用來(lái)排序的集合工具類是什么?如何使用其中的方法?

java.util.Arrays類

 

提供了各種對(duì)象的排序:char[],byte[],long[],int[]和Object[],注Arrays.sort方法排序返回的結(jié)果是升序Ascending的排列順序。你可以定制排序順序。這個(gè)排序和TreeSet的紅黑樹排序方式不同,Set不允許有重復(fù)數(shù)據(jù)存在,因此,當(dāng)有重復(fù)數(shù)據(jù)時(shí),可以使用這個(gè)工具類進(jìn)行排序。Arrays提供的排序算法是歸并排序算法(當(dāng)元素?cái)?shù)量小于=7時(shí)采用的是插入排序),空間復(fù)雜度O(n)。

 

.java.util.Collections類

 

該工具類提供了大量方法對(duì)集合元素進(jìn)行排序、查詢和修改等操作,還提供了將集合對(duì)象設(shè)置為不可變、對(duì)集合對(duì)象實(shí)現(xiàn)同步控制等方法。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新乡县| 平南县| 泰州市| 长武县| 驻马店市| 松溪县| 札达县| 体育| 布尔津县| 凌源市| 广汉市| 广灵县| 若羌县| 犍为县| 三门峡市| 维西| 汉阴县| 永德县| 凯里市| 邵阳县| 开江县| 手游| 右玉县| 定西市| 宣城市| 泸定县| 临城县| 溧水县| 仁化县| 望谟县| 苏尼特右旗| 太原市| 手游| 泰和县| 临西县| 光山县| 滦南县| 兖州市| 石渠县| 德昌县| 谷城县|