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

首頁 > 學院 > 開發設計 > 正文

第7章 異常

2019-11-14 13:05:30
字體:
來源:轉載
供稿:網友

7.1異常概述

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

java 語言定義了一些異常類在java.lang 標準包中。

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

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

Java 程序通常不捕獲錯誤。錯誤一般發生在嚴重故障時,它們在Java程序處理的范疇之外。

Error 用來指示運行時環境發生的錯誤。

例如,JVM 內存溢出。一般地,程序不會從錯誤中恢復。

異常類有兩個主要的子類:IOException 類和 RuntimeException 類。

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

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

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

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

     除了RuntimeException及其子類以外,其他的Exception類及其子類都屬于可查異常。這種異常的特點是Java編譯器會檢查它,也就是說,當程序中可能出現這類異常,要么用try-catch語句捕獲它,要么用throws子句聲明拋出它,否則編譯不會通過。

     不可查異常(編譯器不要求強制處置的異常):包括運行時異常(RuntimeException與其子類)和錯誤(Error)。

    Exception 這種異常分兩大類運行時異常和非運行時異常(編譯異常)。程序中應當盡可能去處理這些異常。

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

      運行時異常的特點是Java編譯器不會檢查它,也就是說,當程序中可能出現這類異常,即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,也會編譯通過。

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

3.Java的異常處理機制有幾種?

在 Java 應用程序中,異常處理機制為:拋出異常,捕捉異常。

7.2 捕獲異常

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

捕獲異常:在方法拋出異常之后,運行時系統將轉為尋找合適的異常處理器(exception handler)。

捕獲異常:try、catch 和 finally

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

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

finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。

如何釋放物理資源?

Close

1.   什么情況下,finally語句塊會執行,什么情況下不會執行?

當程序執行try塊,catch塊時遇到return語句或者throw語句,這兩個語句都會導致該方法立即結束,所以系統并不會立即執行這兩個語句,而是去尋找該異常處理流程中的finally塊,如果沒有finally塊,程序立即執行return語句或者throw語句,方法終止。如果有 finally塊,系統立即開始執行finally塊,只有當finally塊執行完成后,系統才會再次跳回來執行try塊、catch塊里的 return或throw語句,如果finally塊里也使用了return或throw等導致方法終止的語句,則finally塊已經終止了方法,不用 再跳回去執行try塊、catch塊里的任何代碼了。

在以下4種特殊情況下,finally塊不會被執行:

1)在finally語句塊中發生了異常。

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

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

4)關閉CPU。

 

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

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

try/catch代碼塊中的代碼稱為保護代碼,使用 try/catch 的語法如下:

try

{

   //程序代碼

}catch(ExceptionName e1)

{

  //Catch 塊

}

Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 后面的 catch 塊就會被檢查。

如果發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是一樣。

 

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

多重捕獲塊的語法如下所示:

try{

   //程序代碼

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

  // 程序代碼

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

  // 程序代碼

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

  // 程序代碼

}

上面的代碼段包含了 3 個 catch塊。

可以在 try 語句后面添加任意數量的catch 塊。

如果保護代碼中發生異常,異常被拋給第一個 catch 塊。

如果拋出異常的數據類型與 ExceptionType1 匹配,它在這里就會被捕獲。

如果不匹配,它會被傳遞給第二個 catch 塊。

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

 

如果一個方法沒有捕獲一個檢查性異常,那么該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。

也可以使用 throw 關鍵字拋出一個異常,無論它是新實例化的還是剛捕獲到的。

下面方法的聲明拋出一個 RemoteException 異常:

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

一個方法可以聲明拋出多個異常,多個異常之間用逗號隔開。

 

finally 關鍵字用來創建在try 代碼塊后面執行的代碼塊。

無論是否發生異常,finally 代碼塊中的代碼總會被執行。

在 finally 代碼塊中,可以運行清理類型等收尾善后性質的語句。

finally 代碼塊出現在catch 代碼塊最后,語法如下:

try{

  // 程序代碼

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

  // 程序代碼

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

  // 程序代碼

}finally{

  // 程序代碼

}

7.3拋出異常

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

拋出異常:當一個方法出現錯誤引發異常時,方法創建異常對象并交付運行時系統,異常對象中包含了異常類型和異常出現時的程序狀態等異常信息。運行時系統負責尋找處置異常的代碼并執行。

拋出異常:throw、 throws

7.4自定義異常

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

編寫自己的異常類時需要記住下面的幾點。

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

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

如果你想寫一個運行時異常類,那么需要繼承 RuntimeException 類。

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

class MyException extends Exception{

}

只繼承Exception 類來創建的異常類是檢查性異常類。

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

7.5集合概述

1.什么是集合? Java中常用的集合有哪幾類?集合中用來存放什么?集合與數組的區別?

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

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

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

 

通俗的說,集合就是一個放數據的容器,準確的說是放數據對象引用的容器。

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

    二、數組是靜態的,一個數組實例具有固定的大小,一旦創建了就無法改變容量了。而集合是可以動態擴展容量,可以根據需要動態改變大小,集合提供更多的成員方法,能滿足更多的需求。

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

1.數組是大小固定的,一旦創建無法擴容;集合大小不固定,

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

3.數組是java語言中內置的數據類型,是線性排列的,執行效率或者類型檢查(不懂),都是最快的.

 ArrayList就是基于數組創建的容器類.

2.各類集合中元素存與取的特點?如何定義一個集合?

List 有序,可重復。Set 無序,唯一

Map(雙列集合)

    A:Map集合的數據結構僅僅針對鍵有效,與值無關。

    B:存儲的是鍵值對形式的元素,鍵唯一,值可重復。

 

7.6集合類

1.List接口的實現方式?如何定義一個list集合?

6.List集合的特點?7.List集合中常用的方法有哪些?

 

List:、有順序以線性方式存儲,可以存放重復對象

ArrayList:

底層的數據結構是數組;所以它查詢快,增刪慢!

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

Vector:

底層的數據結構是數組;所以它查詢快,增刪慢!

線程安全,但是效率低!

LinkList:

底層的數據結構是鏈表,所以它查詢慢,但是增刪快!

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

 

7.7集合工具類

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

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

 

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

java.util.Arrays類

 

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

 

.java.util.Collections類

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广南县| 汕头市| 桦川县| 永康市| 双辽市| 静乐县| 乳山市| 十堰市| 中牟县| 鸡泽县| 南阳市| 青河县| 义乌市| 建宁县| 阿拉尔市| 舞钢市| 德昌县| 隆林| 开原市| 平潭县| 天等县| 犍为县| 耒阳市| 偏关县| 宜君县| 田阳县| 金门县| 龙江县| 黄骅市| 延安市| 临颍县| 秀山| 余江县| 玛多县| 文登市| 蓬莱市| 邓州市| 朔州市| 塘沽区| 正宁县| 交城县|