亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java異常簡介和架構_動力節點Java學院整理

發布時間:2020-10-18 14:45:25 來源:腳本之家 閱讀:180 作者:skywang12345 欄目:編程語言

Java異常簡介

  Java異常是Java提供的一種識別及響應錯誤的一致性機制。

  Java異常機制可以使程序中異常處理代碼和正常業務代碼分離,保證程序代碼更加優雅,并提高程序健壯性。在有效使用異常的情況下,異常能清晰的回答what, where, why這3個問題:異常類型回答了“什么”被拋出,異常堆棧跟蹤回答了“在哪“拋出,異常信息回答了“為什么“會拋出。
Java異常機制用到的幾個關鍵字:try、catch、finally、throw、throws
• try        -- 用于監聽。將要被監聽的代碼(可能拋出異常的代碼)放在try語句塊之內,當try語句塊內發生異常時,異常就被拋出。
• catch   -- 用于捕獲異常。catch用來捕獲try語句塊中發生的異常。
• finally  -- finally語句塊總是會被執行。它主要用于回收在try塊里打開的物力資源(如數據庫連接、網絡連接和磁盤文件)。只有finally塊,執行完成之后,才會回來執行try或者catch塊中的return或者throw語句,如果finally中使用了return或者throw等終止方法的語句,則就不會跳回執行,直接停止。
• throw   -- 用于拋出異常。
• throws -- 用在方法簽名中,用于聲明該方法可能拋出的異常。 

下面通過幾個示例對這幾個關鍵字進行簡單了解。

示例一: 了解try和catch基本用法

public class Demo1 {

  public static void main(String[] args) {
    try {
      int i = 10/0;
       System.out.println("i="+i); 
    } catch (ArithmeticException e) {
       System.out.println("Caught Exception"); 
      System.out.println("e.getMessage(): " + e.getMessage()); 
      System.out.println("e.toString(): " + e.toString()); 
      System.out.println("e.printStackTrace():");
      e.printStackTrace(); 
    }
  }
}

運行結果:

Caught Exception
e.getMessage(): / by zero
e.toString(): java.lang.ArithmeticException: / by zero
e.printStackTrace():
java.lang.ArithmeticException: / by zero
    at Demo1.main(Demo1.java:6)

結果說明:在try語句塊中有除數為0的操作,該操作會拋出java.lang.ArithmeticException異常。通過catch,對該異常進行捕獲。

觀察結果我們發現,并沒有執行System.out.println("i="+i)。這說明try語句塊發生異常之后,try語句塊中的剩余內容就不會再被執行了。 

示例二: 了解finally的基本用法
在"示例一"的基礎上,我們添加finally語句。

public class Demo2 {

  public static void main(String[] args) {
    try {
      int i = 10/0;
       System.out.println("i="+i); 
    } catch (ArithmeticException e) {
       System.out.println("Caught Exception"); 
      System.out.println("e.getMessage(): " + e.getMessage()); 
      System.out.println("e.toString(): " + e.toString()); 
      System.out.println("e.printStackTrace():");
      e.printStackTrace(); 
    } finally {
      System.out.println("run finally");
    }
  }
}

運行結果:

Caught Exception
e.getMessage(): / by zero
e.toString(): java.lang.ArithmeticException: / by zero
e.printStackTrace():
java.lang.ArithmeticException: / by zero
    at Demo2.main(Demo2.java:6)
run finally

結果說明:最終執行了finally語句塊。 

示例三: 了解throws和throw的基本用法
throws是用于聲明拋出的異常,而throw是用于拋出異常。

class MyException extends Exception {
  public MyException() {}
  public MyException(String msg) {
    super(msg);
  }
}

public class Demo3 {

  public static void main(String[] args) {
    try {
      test();
    } catch (MyException e) {
      System.out.println("Catch My Exception");
      e.printStackTrace();
    }
  }
  public static void test() throws MyException{
    try {
      int i = 10/0;
       System.out.println("i="+i); 
    } catch (ArithmeticException e) {
      throw new MyException("This is MyException"); 
    }
  }
}

運行結果:

Catch My Exception
MyException: This is MyException
    at Demo3.test(Demo3.java:24)
    at Demo3.main(Demo3.java:13)

結果說明:

  MyException是繼承于Exception的子類。test()的try語句塊中產生ArithmeticException異常(除數為0),并在catch中捕獲該異常;接著拋出MyException異常。main()方法對test()中拋出的MyException進行捕獲處理。 

Java異常框架

Java異常架構圖

Java異常簡介和架構_動力節點Java學院整理

1. Throwable

  Throwable是 Java 語言中所有錯誤或異常的超類。
  Throwable包含兩個子類: Error 和 Exception。它們通常用于指示發生了異常情況。
  Throwable包含了其線程創建時線程執行堆棧的快照,它提供了printStackTrace()等接口用于獲取堆棧跟蹤數據等信息。

2. Exception

  Exception及其子類是 Throwable 的一種形式,它指出了合理的應用程序想要捕獲的條件。

3. RuntimeException 

  RuntimeException是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。
  編譯器不會檢查RuntimeException異常。例如,除數為零時,拋出ArithmeticException異常。RuntimeException是ArithmeticException的超類。當代碼發生除數為零的情況時,倘若既"沒有通過throws聲明拋出ArithmeticException異常",也"沒有通過try...catch...處理該異常",也能通過編譯。這就是我們所說的"編譯器不會檢查RuntimeException異常"!
  如果代碼會產生RuntimeException異常,則需要通過修改代碼進行避免。例如,若會發生除數為零的情況,則需要通過代碼避免該情況的發生!

4. Error

  和Exception一樣,Error也是Throwable的子類。它用于指示合理的應用程序不應該試圖捕獲的嚴重問題,大多數這樣的錯誤都是異常條件。
  和RuntimeException一樣,編譯器也不會檢查Error。 

Java將可拋出(Throwable)的結構分為三種類型:被檢查的異常(Checked Exception),運行時異常(RuntimeException)和錯誤(Error)。

(01) 運行時異常

定義: RuntimeException及其子類都被稱為運行時異常。
特點: Java編譯器不會檢查它。也就是說,當程序中可能出現這類異常時,倘若既"沒有通過throws聲明拋出它",也"沒有用try-catch語句捕獲它",還是會編譯通過。例如,除數為零時產生的ArithmeticException異常,數組越界時產生的IndexOutOfBoundsException異常,fail-fail機制產生的ConcurrentModificationException異常等,都屬于運行時異常。
  雖然Java編譯器不會檢查運行時異常,但是我們也可以通過throws進行聲明拋出,也可以通過try-catch對它進行捕獲處理。
  如果產生運行時異常,則需要通過修改代碼來進行避免。例如,若會發生除數為零的情況,則需要通過代碼避免該情況的發生!

(02) 被檢查的異常

定義: Exception類本身,以及Exception的子類中除了"運行時異常"之外的其它子類都屬于被檢查異常。
特點: Java編譯器會檢查它。此類異常,要么通過throws進行聲明拋出,要么通過try-catch進行捕獲處理,否則不能通過編譯。例如,CloneNotSupportedException就屬于被檢查異常。當通過clone()接口去克隆一個對象,而該對象對應的類沒有實現Cloneable接口,就會拋出CloneNotSupportedException異常。
  被檢查異常通常都是可以恢復的。

(03) 錯誤

定義: Error類及其子類。
特點: 和運行時異常一樣,編譯器也不會對錯誤進行檢查。
  當資源不足、約束失敗、或是其它程序無法繼續運行的條件發生時,就產生錯誤。程序本身無法修復這些錯誤的。例如,VirtualMachineError就屬于錯誤。
  按照Java慣例,我們是不應該是實現任何新的Error子類的!
對于上面的3種結構,我們在拋出異常或錯誤時,到底該哪一種?《Effective Java》中給出的建議是:對于可以恢復的條件使用被檢查異常,對于程序錯誤使用運行時異常。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贵港市| 永登县| 房产| 政和县| 新和县| 佳木斯市| 社旗县| 项城市| 榆树市| 格尔木市| 景宁| 常德市| 于都县| 安新县| 合川市| 新巴尔虎右旗| 师宗县| 洞头县| 贵港市| 饶阳县| 台前县| 洛浦县| 长阳| 专栏| 安平县| 平陆县| 时尚| 乌苏市| 宿松县| 剑川县| 盐山县| 巨鹿县| 玉环县| 锦州市| 澜沧| 广汉市| 舞钢市| 肇源县| 会宁县| 徐闻县| 崇州市|