日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java常见异常思维导图_21_异常_第21天(异常、企业面试题,思维导图下载)

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java常见异常思维导图_21_异常_第21天(异常、企业面试题,思维导图下载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今日內容介紹

1、異常概述和繼承體系

2、異常原因以及處理方式

3、運行時期異常

4、方法重寫的異常處理

5、Throwable類常見方法

6、自定義異常

01異常的概述

* A: 異常的概述

* a:什么是異常

* Java代碼在運行時期發生的問題就是異常。

* b:異常類

* 在Java中,把異常信息封裝成了一個類。

* 當出現了問題時,就會創建異常類對象并拋出異常相關的信息(如異常出現的位置、原因等)。

* c:我們見過的異常:數組角標越界異常ArrayIndexOutOfBoundsException,空指針異常NullPointerException

02異常的繼續體系和錯誤的區別

* A: 異常的繼承體系

Throwable: 它是所有錯誤與異常的超類(祖宗類)

|- Error 錯誤

|- Exception 編譯期異常,進行編譯JAVA程序時出現的問題

|- RuntimeException 運行期異常, JAVA程序運行過程中出現的問題

* B:異常與錯誤的區別

* a:異常

* 指程序在編譯、運行期間發生了某種異常(XxxException),我們可以對異常進行具體的處理。

* 若不處理異常,程序將會結束運行。

* 案例演示:

public static void main(String[] args) {

int[] arr = new int[3];

System.out.println(arr[0]);

System.out.println(arr[3]);

// 該句運行時發生了數組索引越界異常ArrayIndexOutOfBoundsException,

// 由于沒有處理異常,導致程序無法繼續執行,程序結束。

System.out.println("over"); // 由于上面代碼發生了異常,此句代碼不會執行

}

* b:錯誤

* 指程序在運行期間發生了某種錯誤(XxxError),Error錯誤通常沒有具體的處理方式,程序將會結束運行。

* Error錯誤的發生往往都是系統級別的問題,都是jvm所在系統發生的,并反饋給jvm的。

* 我們無法針對處理,只能修正代碼。

* 案例演示:

public static void main(String[] args) {

int[] arr = new int[1024*1024*100];

//該句運行時發生了內存溢出錯誤OutOfMemoryError,開辟了過大的數組空間,

//導致JVM在分配數組空間時超出了JVM內存空間,直接發生錯誤。

}

03異常對象的產生原因和處理方式

* A: 異常對象的產生原因

* 案例代碼:

* 工具類

class ArrayTools{

//對給定的數組通過給定的角標獲取元素。

public static int getElement(int[] arr,int index) {

int element = arr[index];

return element;

}

}

* 測試類

class ExceptionDemo2 {

public static void main(String[] args) {

int[] arr = {34,12,67};

int num = ArrayTools.getElement(arr,4)

System.out.println("num="+num);

System.out.println("over");

}

}

* 原因分析:

* a: 由于沒找到4索引,導致運行時發生了異常。這個異常JVM認識:ArrayIndexOutOfBoundsException。

這個異常Java本身有描述:異常的名稱、異常的內容、異常的產生位置。

java將這些信息直接封裝到異常對象中。new ArrayIndexOutOfBoundsException(4);

* b:throw new ArrayIndexOutOfBoundsException(4);產生異常對象。JVM將產生的異常拋給調用者main()方法。

* c:main()方法接收到了數組索引越界異常對象。

由于main()方法并沒有進行處理異常,main()方法就會繼續把異常拋給調用者JVM。

當JVM收到異常后,將異常對象中的名稱、異常內容、位置都顯示在就控制臺上。同時讓程序立刻終止。

* B:異常的處理方式

* a:JVM的默認處理方式

* 把異常的名稱,原因,位置等信息輸出在控制臺,同時會結束程序。

* 一旦有異常發生,其后來的代碼不能繼續執行。

* b:解決程序中異常的手動方式

* a):編寫處理代碼 try...catch...finally

* b):拋出 throws

04方法內部拋出對象throw關鍵字

在java中,提供了一個throw關鍵字,它用來拋出一個指定的異常對象。

* A: 什么時候使用throw關鍵字?

* 當調用方法使用接受到的參數時,首先需要先對參數數據進行合法的判斷,

數據若不合法,就應該告訴調用者,傳遞合法的數據進來。

這時需要使用拋出異常的方式來告訴調用者。

* B: 使用throw關鍵字具體操作

* a: 創建一個異常對象。封裝一些提示信息(信息可以自己編寫)。

* b: 通過關鍵字throw將這個異常對象告知給調用者。throw 異常對象;

throw 用在方法內,用來拋出一個異常對象,將這個異常對象傳遞到調用者處,并結束當前方法的執行。

* C: throw關鍵字使用格式

* throw new 異常類名(參數);

* 例如:

throw new NullPointerException("要訪問的arr數組不存在");

throw new ArrayIndexOutOfBoundsException("該索引在數組中不存在,已超出范圍");

* D:案例演示

* throw的使用

05方法聲明異常關鍵字throws

* A: 聲明

* 將問題標識出來,報告給調用者。如果方法內通過throw拋出了編譯時異常,而沒有捕獲處理

* (稍后講解該方式),那么必須通過throws進行聲明,讓調用者去處理。

* B: 聲明異常格式

* 修飾符 返回值類型 方法名(參數) throws 異常類名1,異常類名2… { }

* C:注意事項:

* throws用于進行異常類的聲明,若該方法可能有多種異常情況產生,那么在throws后面可

* 以寫多個異常類,用逗號隔開。

* D:代碼演示:

* 多個異常的處理

06try...catch異常處理

* A: 捕獲

* Java中對異常有針對性的語句進行捕獲,可以對出現的異常進行指定方式的處理

* B: 捕獲異常格式

try {

//需要被檢測的語句。

}

catch(異常類 變量) { //參數。

//異常的處理語句。

}

finally {

//一定會被執行的語句。

}

* C: 格式說明

* a: try

* 該代碼塊中編寫可能產生異常的代碼。

* b: catch

* 用來進行某種異常的捕獲,實現對捕獲到的異常進行處理。

* c: finally:

* 有一些特定的代碼無論異常是否發生,都需要執行。

* 另外,因為異常會引發程序跳轉,導致有些語句執行不到。

* 而finally就是解決這個問題的,在finally代碼塊中存放的代碼都是一定會被執行的。

* d:try...catch...處理掉異常后,程序可以繼續執行

* D:案例演示

* 捕獲異常格式

07多catch處理

* A:一個try 多個catch組合

* 對代碼進行異常檢測,并對檢測的異常傳遞給catch處理。對每種異常信息進行不同的捕獲處理。

* B:多catch處理的格式

void show(){ //不用throws

try{

throw new Exception();//產生異常,直接捕獲處理

}catch(XxxException e){

//處理方式

}catch(YyyException e){

//處理方式

}catch(ZzzException e){

//處理方式

}

}

注意事項:在捕獲異常處理中,變量也是有作用域的,如可以定義多個catch中異常變量名為e。

08多catch處理細節

* A:細節:多個catch小括號中,寫的是異常類的類名,有沒有順序的概念?

* 有順序關系。

* B:平級異常:

* 拋出的異常類之間,沒有繼承關系,沒有順序

NullPointerException extends RuntimeException

NoSuchElementException extends RuntimeException

ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException extends RuntimeException

* C:上下級關系的異常

* 越高級的父類,越寫在下面

NullPointerException extends RuntimeException extends Exception

09finally代碼塊

* A: finally的特點

* 被finally控制的語句體一定會執行

* B:finally的作用

* finally,無論程序是否有異常出現,程序必須執行釋放資源在

如:IO流操作和數據庫操作中會見到

10調用拋出異常方法try和throws處理方式

* A: 在實際開發中使用哪種異常處理方式呢?

* 能自己處理的盡量自己處理。(建議用try...catch)

11運行時期異常的特點

* A: 運行時期異常的概述:

* RuntimeException和他的所有子類異常,都屬于運行時期異常。

NullPointerException,ArrayIndexOutOfBoundsException等都屬于運行時期異常.

* B:運行時期異常的特點

* a:方法中拋出運行時期異常,方法定義中無需throws聲明,調用者也無需處理此異常。

* b:運行時期異常一旦發生,需要程序人員修改源代碼。

設計原因:

運行異常,不能發生,但是如果發生了,程序人員停止程序修改源代碼

運行異常: 一旦發生,不要處理,請你修改源代碼,運行異常一旦發生,后面的代碼沒有執行的意義

12運行異常的案例

* A: 計算圓的面積案例

定義方法,計算圓形的面積

傳遞參數0,或者負數,計算的時候沒有問題

但是,違反了真實情況

參數小于=0, 停止程序,不要在計算了

* B:數組索引越界案例

使用數組中不存在的索引

public class RuntimeExceptionDemo {

public static void main(String[] args) {

double d = getArea(1);

System.out.println(d);

}

/*

* 定義方法,計算圓形的面積

* 傳遞參數0,或者負數,計算的時候沒有問題

* 但是,違反了真實情況

* 參數小于=0, 停止程序,不要在計算了

*/

public static double getArea(double r){

if(r <= 0)

throw new RuntimeException("圓形不存在");

return r*r*Math.PI;

}

public static void function(){

int[] arr = {1,2,3};

//對數組的5索引進行判斷,如果5索引大于100,請將5索引上的數據/2,否則除以3

//索引根本就沒有

if(arr[5] > 100){

arr[5] = arr[5]/2;

}else{

arr[5] = arr[5]/3;

}

}

13方法重寫時候異常的處理

* A:方法重寫時候異常的處理

* a:子類覆蓋父類方法時,如果父類的方法聲明異常,子類只能聲明父類異常或者該異常的子類,或者不聲明。

例如:

class Fu {

public void method () throws RuntimeException {

}

}

class Zi extends Fu {

public void method() throws RuntimeException { } //拋出父類一樣的異常

//public void method() throws NullPointerException{ } //拋出父類子異常

}

* b:當父類方法聲明多個異常時,子類覆蓋時只能聲明多個異常的子集。

例如:

class Fu {

public void method () throws NullPointerException, ClassCastException{

}

}

class Zi extends Fu {

public void method()throws NullPointerException, ClassCastException { }

public void method() throws NullPointerException{ } //拋出父類異常中的一部分

public void method() throws ClassCastException { } //拋出父類異常中的一部分

}

* c:當被覆蓋的方法沒有異常聲明時,子類覆蓋時無法聲明異常的。

例如:

class Fu {

public void method (){

}

}

class Zi extends Fu {

public void method() throws Exception { }//錯誤的方式

}

* B:問題:父類中會存在下列這種情況,接口也有這種情況。

接口中沒有聲明異常,而實現的子類覆蓋方法時發生了異常,怎么辦?

回答:無法進行throws聲明,只能catch的捕獲。

萬一問題處理不了呢?catch中繼續throw拋出,但是只能將異常轉換成RuntimeException子類拋出。

14Throwable類方法

* A: 常見方法

* a:getMessage()方法

返回該異常的詳細信息字符串,即異常提示信息

* b:toString()方法

返回該異常的名稱與詳細信息字符串

* c:printStackTrace()方法

在控制臺輸出該異常的名稱與詳細信息字符串、異常出現的代碼位置

* B:案例演示

異常的常用方法代碼演示

try {

Person p= null;

if (p==null) {

throw new NullPointerException(“出現空指針異常了,請檢查對象是否為null”);

}

} catch (NullPointerException e) {

String message = e.getMesage();

System.out.println(message );

String result = e.toString();

System.out.println(result);

e.printStackTrace();

}

15自定義異常

* A: 自定義異常的定義

* a:通過閱讀源碼,發現規律:

每個異常中都調用了父類的構造方法,把異常描述信息傳遞給了父類,讓父類幫我們進行異常信息的封裝。

* b:格式:

Class 異常名 extends Exception{ //或繼承RuntimeException

public 異常名(){

}

public 異常名(String s){

super(s);

}

}

* c:自定義異常繼承Exception演示

* d:自定義異常繼承RuntimeException演示

* B:自定義異常的練習

在Person類的有參數構造方法中,進行年齡范圍的判斷,

若年齡為負數或大于200歲,則拋出NoAgeException異常,異常提示信息“年齡數值非法”。

要求:在測試類中,調用有參數構造方法,完成Person對象創建,并進行異常的處理。

* C:關于構造方法拋出異常總結

構造函數到底拋出這個NoAgeException是繼承Exception呢?還是繼承RuntimeException呢?

* a:繼承Exception,必須要throws聲明,一聲明就告知調用者進行捕獲,一旦問題處理了調用者的程序會繼續執行。

* b:繼承RuntimeExcpetion,不需要throws聲明的,這時調用是不需要編寫捕獲代碼的,因為調用根本就不知道有問題。

一旦發生NoAgeException,調用者程序會停掉,并有jvm將信息顯示到屏幕,讓調用者看到問題,修正代碼。

作業測試

1.簡述什么是異常、異常的繼承體系?

Java代碼在運行時期發生的問題就是異常。

異常的繼承體系:

Throwable: 它是所有錯誤與異常的超類(祖宗類)

|- Error 錯誤

|- Exception 編譯期異常,進行編譯JAVA程序時出現的問題

|- RuntimeException 運行期異常, JAVA程序運行過程中出現的問題

2.簡述異常的處理方式?

異常的處理方式:

a:JVM的默認處理方式

把異常的名稱,原因,位置等信息輸出在控制臺,同時會結束程序。

一旦有異常發生,其后來的代碼不能繼續執行。

b:解決程序中異常的手動方式

a):編寫處理代碼 try...catch...finally

b):拋出 throws

3.throw和throws關鍵字的使用位置和格式?

throw:

使用位置:方法內部

使用格式:throw new 異常類名(參數);

throws:

使用位置:方法聲明上

使用格式:修飾符 返回值類型 方法名(參數) throws 異常類名1,異常類名2… { }

4.多個catch處理的注意事項?

有順序:

平級異常:拋出的異常類之間,沒有繼承關系,沒有順序

上下級關系的異常:越高級的父類,越寫在下面

5.簡述finally關鍵字的特點和作用?

A: finally的特點

被finally控制的語句體一定會執行

B:finally的作用

finally,無論程序是否有異常出現,程序必須執行釋放資源。

如:IO流操作和數據庫操作中會見到

6.Throwable類的常見方法及方法描述?

a:getMessage()方法

返回該異常的詳細信息字符串,即異常提示信息

b:toString()方法

返回該異常的名稱與詳細信息字符串

c:printStackTrace()方法

在控制臺輸出該異常的名稱與詳細信息字符串、異常出現的代碼位置

7.自定義異常的格式?

class 異常名 extends Exception{ //或繼承RuntimeException

public 異常名(){

}

public 異常名(String s){

super(s);

}

}

企業面試題

1.異常的概述

對Java來說,異常就是一個類,產生了一個異常,就是產生了一個類的對象,這個類代表不正常的現象

整個異常體系 :重要

Throwable(生病)

Error (不可治愈的疾病) 錯誤:宕機,斷點,海嘯

Exception (能治愈的疾病) : 異常,程序員能處理

非RuntimeExcetion 非運行時期異常,編譯器異常,要求我們在編譯器就必須進行處理

RuntimeException(運行時期異常 )

2.異常的注意事項:

異常的注意事項:

1.如果對發生的異常一直不處理,程序不再繼續執行

2.如果對發生的異常進行try,catch,此時發生了異常,try下的代碼不會執行,此異常會被catch捕獲,同時程序繼續執行

3.異常處理的第一種方式:

第一種方式:捕獲異常(分為單異常捕獲,和多異常捕獲)

使用規則:異常捕獲

try{

// 可能產生異常的代碼

}catch(Exception e){

// 如果產生異常,進行處理

}

Java處理異常的機制:如果不處理異異常,則代碼停止執行,并且將異常直接拋給JVM。

使用規則:多異常捕獲

try{

// 可能發生異常的代碼

}catch(異常類型 | 異常類型 e2){

//如果產生異常,進行的處理

// e.printStackTrace() 打印 針對于程序員的public class Demo01 {

public static void main(String[] args) {

Test t = new Test();

int method = t.method();

System.out.println(method);

}

}

class Test{

public int method(){

int i = 0;

try{

System.out.println(1/0);

return i;

}catch(Exception e){

e.printStackTrace();

}finally{

i = 200;

System.out.println("我一定會運行");

}

return i;

}

//返回路徑:每次碰到return就會在返回路徑中臨時存儲這個被返回的值,無論方法內有任何的改變,返回路徑中的這個值一致不變。

}

//異常名字,異常描述,異常發生在哪兒

}

問題為什么要分開捕獲

注意:該異常處理,只能是針對同級異常

4.異常處理的第二種方式

使用規則:拋出異常,在方法后邊加上throws

兩個問題:

如果不處理異常,那么異常最終會到哪兒

如果拋出了異常,誰處理。

5.自定義異常

使用規則: extends RuntimeException

4個構造方法

1.創建自定義異常 -->extends

RuntimeException

非RuntimeException

需要實現父類的構造方法(傳入自己的異常信息)

throw 進行拋出,并且進型處理

6.子父類異常注意事項:

運行異常的特點:

父類的方法,如果拋出異常,子類重寫后可以不拋出異常也可以拋出異常,

但是,如果子類要拋,拋出的異常不能大于父類的異常大于,都指的是繼承關系

父類的方法,沒有異常拋出,子類重寫后也不能拋出異常,如果子類中調用了拋出異常的方法,別無選擇,只能try..catch處理意義

1、 throw 和throws 的區別是什么

throw

定義在方法中,后邊跟的是異常對象

同時只能拋出一個異常對象

throws

定義在方法的聲明上,后邊跟的是異常的類型

后邊同時可以跟多個數據類型

2、 finally 返回路勁面試題

2. finally :在正常情況下,肯定執行的代碼

在try中return,在finally中修改:

//返回路徑:每次碰到return就會在返回路徑中臨時存儲這個被返回的值,無論方法內有任何的改變,返回路徑中的這個值一致不變。

代碼:

public class Demo01 {

public static void main(String[] args) {

Test t = new Test();

int method = t.method();

System.out.println(method);

}

}

class Test{

public int method(){

int i = 0;

try{

System.out.println(1/0);

return i;

}catch(Exception e){

e.printStackTrace();

}finally{

i = 200;

System.out.println("我一定會運行");

}

return i;

}

//返回路徑:每次碰到return就會在返回路徑中臨時存儲這個被返回的值,無論方法內有任何的改變,返回路徑中的這個值一致不變。

}

總結

以上是生活随笔為你收集整理的java常见异常思维导图_21_异常_第21天(异常、企业面试题,思维导图下载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。