最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java異常簡介和架構(gòu)_動力節(jié)點(diǎn)Java學(xué)院整理

 更新時間:2017年06月16日 10:58:28   作者:skywang12345  
這篇文章主要分享了Java異常簡介和架構(gòu),具有一定的參考價值,感興趣的小伙伴們可以參考一下

Java異常簡介

  Java異常是Java提供的一種識別及響應(yīng)錯誤的一致性機(jī)制。

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

下面通過幾個示例對這幾個關(guān)鍵字進(jìn)行簡單了解。

示例一: 了解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(); 
    }
  }
}

運(yùn)行結(jié)果:

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)

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

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

示例二: 了解finally的基本用法
在"示例一"的基礎(chǔ)上,我們添加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");
    }
  }
}

運(yùn)行結(jié)果:

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

結(jié)果說明:最終執(zhí)行了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"); 
    }
  }
}

運(yùn)行結(jié)果:

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

結(jié)果說明:

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

Java異??蚣?br />

Java異常架構(gòu)圖

1. Throwable

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

2. Exception

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

3. RuntimeException 

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

4. Error

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

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

(01) 運(yùn)行時異常

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

(02) 被檢查的異常

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

(03) 錯誤

定義: Error類及其子類。
特點(diǎn): 和運(yùn)行時異常一樣,編譯器也不會對錯誤進(jìn)行檢查。
  當(dāng)資源不足、約束失敗、或是其它程序無法繼續(xù)運(yùn)行的條件發(fā)生時,就產(chǎn)生錯誤。程序本身無法修復(fù)這些錯誤的。例如,VirtualMachineError就屬于錯誤。
  按照J(rèn)ava慣例,我們是不應(yīng)該是實(shí)現(xiàn)任何新的Error子類的!
對于上面的3種結(jié)構(gòu),我們在拋出異?;蝈e誤時,到底該哪一種?《Effective Java》中給出的建議是:對于可以恢復(fù)的條件使用被檢查異常,對于程序錯誤使用運(yùn)行時異常。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java輸出Hello World完美過程解析

    Java輸出Hello World完美過程解析

    當(dāng)我們學(xué)習(xí)一門編程語言的時候,我們都會先學(xué)如何輸出Hello World!本文通過幾個例子給大家介紹輸出Hello World的代碼,感興趣的朋友一起看看吧
    2021-06-06
  • SSM項(xiàng)目中配置LOG4J日志的方法

    SSM項(xiàng)目中配置LOG4J日志的方法

    本篇文章主要介紹了SSM項(xiàng)目中配置LOG4J日志的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Spring在多線程環(huán)境下如何確保事務(wù)一致性問題詳解

    Spring在多線程環(huán)境下如何確保事務(wù)一致性問題詳解

    這篇文章主要介紹了Spring在多線程環(huán)境下如何確保事務(wù)一致性問題詳解,說到異步執(zhí)行,很多小伙伴首先想到Spring中提供的@Async注解,但是Spring提供的異步執(zhí)行任務(wù)能力并不足以解決我們當(dāng)前的需求,需要的朋友可以參考下
    2023-11-11
  • MinIO學(xué)習(xí)指南看這一篇就夠了

    MinIO學(xué)習(xí)指南看這一篇就夠了

    本文介紹了對象存儲、服務(wù)器磁盤和分布式文件系統(tǒng)的基本概念和區(qū)別,重點(diǎn)講解了MinIO的安裝、配置和基本操作,以及如何在SpringBoot項(xiàng)目中集成MinIO,感興趣的朋友一起看看吧
    2025-02-02
  • 詳解SpringSecurity中的Authentication信息與登錄流程

    詳解SpringSecurity中的Authentication信息與登錄流程

    這篇文章主要介紹了SpringSecurity中的Authentication信息與登錄流程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Spring?AOP實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能

    Spring?AOP實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能

    這篇文章主要為大家詳細(xì)介紹了Spring?AOP如何實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)具有一定的借鑒價值,需要的可以參考一下
    2023-01-01
  • spring boot整合Cucumber(BDD)的方法

    spring boot整合Cucumber(BDD)的方法

    本篇文章主要介紹了spring boot整合Cucumber(BDD)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • SpringBoot如何導(dǎo)出Jar包并測試(使用IDEA)

    SpringBoot如何導(dǎo)出Jar包并測試(使用IDEA)

    這篇文章主要介紹了SpringBoot如何導(dǎo)出Jar包并測試(使用IDEA),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springboot+mybatis-plus 兩種方式打印sql語句的方法

    springboot+mybatis-plus 兩種方式打印sql語句的方法

    這篇文章主要介紹了springboot+mybatis-plus 兩種方式打印sql語句的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 詳解Spring Security 簡單配置

    詳解Spring Security 簡單配置

    本篇文章主要介紹了詳解Spring Security 簡單配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

博兴县| 清新县| 镇安县| 英山县| 凤凰县| 青海省| 商都县| 武城县| 嵩明县| 西乌珠穆沁旗| 南宫市| 福泉市| 香河县| 巴彦淖尔市| 芮城县| 永仁县| 波密县| 建湖县| 长宁区| 新蔡县| 吉木萨尔县| 滕州市| 凭祥市| 三穗县| 清涧县| 永泰县| 合阳县| 蒙城县| 高清| 前郭尔| 北辰区| 乐业县| 靖安县| 宾阳县| 昌平区| 上栗县| 泾阳县| 慈溪市| 芦溪县| 光泽县| 武汉市|