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

Java十分鐘精通異常處理機(jī)制

 更新時(shí)間:2022年04月06日 16:46:13   作者:星空下的213  
異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機(jī)制是我們java語言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等

一、什么是異常

異常機(jī)制:

異常機(jī)制是指當(dāng)程序出現(xiàn)錯(cuò)誤后,程序如何處理。具體來說就是程序發(fā)生異常,異常機(jī)制提供程序的退出安全通道。

通俗來說:就是為了讓程序繼續(xù)執(zhí)行下去,不至于中斷。

程序錯(cuò)誤:

程序錯(cuò)誤分為三種:

1.編譯錯(cuò)誤

2.運(yùn)行時(shí)錯(cuò)誤

3.邏輯錯(cuò)誤。

(1)編譯錯(cuò)誤:因?yàn)槌绦驔]有遵循語法規(guī)則,編譯程序能夠自己發(fā)現(xiàn)并提示我們的錯(cuò)誤的原因和位置。

(2)運(yùn)行時(shí)錯(cuò)誤:因?yàn)槌绦蛟趫?zhí)行時(shí),運(yùn)行環(huán)境發(fā)現(xiàn)了不能執(zhí)行的操作。

(3)邏輯錯(cuò)誤:因?yàn)槌绦驔]有按照預(yù)期的邏輯順序執(zhí)行。

異常就是指程序運(yùn)行時(shí)發(fā)生錯(cuò)誤,而異常處理就是對這些錯(cuò)誤進(jìn)行處理和控制。

編譯錯(cuò)誤如下:

編譯錯(cuò)誤

運(yùn)行錯(cuò)誤如下:

運(yùn)行異常

算數(shù)異常報(bào)錯(cuò):

錯(cuò)誤描述

二、異常的結(jié)構(gòu)圖

在這里插入圖片描述

常見異常:

序號異常名稱異常描述
1java.lang.NullPointerException空指針異常:對象為空,并且調(diào)用相應(yīng)方法。
2java.lang.ClassNotFoundException找不到指定類
3java.lang.ArrayIndexOutOfBoundsException數(shù)組下標(biāo)越界
4java.lang.NumberFormatException數(shù)字格式化異常
5java.lang.ArithmeticException數(shù)學(xué)運(yùn)算異常
6java.lang.StackOverflowError內(nèi)存空間溢出錯(cuò)誤,方法遞歸調(diào)用中,經(jīng)常發(fā)生
7java.lang.ClassCastException類型轉(zhuǎn)換異常,向下轉(zhuǎn)型中經(jīng)常發(fā)生
8java.text.ParseException時(shí)間格式化異常,SimpleDateFormart中經(jīng)常發(fā)生
9java.util.InputMismatchException輸入類型不匹配異常

三、捕獲異常

虛擬機(jī)對異常的兩種處理方式:

  • 捕獲異常
  • 拋出異常

捕獲異常

try - catch - finally

  • try:嘗試著執(zhí)行可能會出現(xiàn)異常的代碼
  • catch:如果try中的代碼在執(zhí)行過程中,出現(xiàn)了異常,捕獲該異常,如果沒有異常,就不執(zhí)行。
  • finaliy:其中的代碼塊是不管報(bào)不報(bào)錯(cuò)都會執(zhí)行的,通常用來釋放資源。
try{
    //可能會出錯(cuò)的代碼塊
}catch(){
    //出現(xiàn)異常后,執(zhí)行的語句
}finally{
    //通常用來釋放資源
}

四、聲明和拋出異常

1.使用throws聲明異常

? 運(yùn)用于方法聲明之上,用于表示當(dāng)前方法不處理異常,而是提醒該方法的調(diào)用者來處理異常

public void fun1() throws ParseException {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = format.parse("2020-10-12");
}

2.使用throw拋出異常

? throw用在方法內(nèi),用來拋出一個(gè)異常對象,將這個(gè)異常對象傳遞到調(diào)用者處,并結(jié)束當(dāng)前方法的執(zhí)行。

public void fun2() {
     throw new NullPointerException("空指針異常");  
     System.out.println("hello world");//會報(bào)紅,提示unreachable statement,該語句不可能被執(zhí)行
}

案例:

1、嵌套try-catch

@Test
public void fun2()  {
    try {
        throw new Exception("非運(yùn)行時(shí)異常,哈哈哈");
    } catch (Exception e) {
        e.printStackTrace();
        try {
            throw new ParseException("解析異常,哈哈哈",0);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }finally {
        try {
            throw new TimeoutException("超時(shí)異常,哈哈哈");
        } catch (TimeoutException e) {
            e.printStackTrace();
            try {
                throw new SQLException("SQL異常");
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }
}

2、代替返回語句

public int  funR1(){
        try {
            return 1;
        }catch (Exception e){
           throw new RuntimeException();
        }
    }
public int  funR2(){
    if(true) {
        return 1;
    }else{
        throw new RuntimeException();
    }
}

五、自定義異常

自定義異常,通常就是定義了一個(gè)繼承自Exception類的子類,那么這個(gè)類就是一個(gè)自定義異常類。通常情況下,我們都會直接繼承自Exception,一般不會繼承某個(gè)運(yùn)行時(shí)異常類。

案例如下:

public class HeroNotExistException extends RuntimeException {
    private String m;

    public String getM() {
        return m;
    }

    public void setM(String m) {
        this.m = m;
    }
//兩個(gè)參數(shù)的有參構(gòu)造,一個(gè)傳遞給父類Throwable,一個(gè)自己用
    public HeroNotExistException(String message, String m){
       super(message);
       this.m=m;
    }

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("請輸入您最欣賞的歷史人物:");
        String name = sc.next();
        if(name.equals("孫悟空")){
            try{
                throw new HeroNotExistException("英雄人物不存在","哈哈");
            }catch (HeroNotExistException e){
                e.printStackTrace();
                System.out.println(e.getM());
            }
        }
    }
    
}

到此這篇關(guān)于Java十分鐘精通異常處理機(jī)制的文章就介紹到這了,更多相關(guān)Java 異常處理機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot在生產(chǎn)快速禁用Swagger2的方法步驟

    SpringBoot在生產(chǎn)快速禁用Swagger2的方法步驟

    這篇文章主要介紹了SpringBoot在生產(chǎn)快速禁用Swagger2的方法步驟,使用注解關(guān)閉Swagger2,避免接口重復(fù)暴露,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-12-12
  • 關(guān)于ApplicationContext的啟動流程詳解

    關(guān)于ApplicationContext的啟動流程詳解

    ApplicationContext是Spring框架中用于管理和配置Bean的核心接口,它的啟動流程包括準(zhǔn)備刷新、獲取BeanFactory、準(zhǔn)備BeanFactory、后置處理BeanFactory、調(diào)用BeanFactoryPostProcessor、注冊BeanPostProcessor
    2025-03-03
  • java?Date獲取本月的開始時(shí)間與結(jié)束時(shí)間

    java?Date獲取本月的開始時(shí)間與結(jié)束時(shí)間

    這篇文章主要為大家介紹了java?Date獲取本月的開始時(shí)間與結(jié)束時(shí)間示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2023-05-05
  • Springboot中如何集成Druid

    Springboot中如何集成Druid

    Druid是Java語言中最好的數(shù)據(jù)庫連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,本篇主要講解一下?Springboot中如何集成?Druid?,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換實(shí)踐

    SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換實(shí)踐

    這篇主要介紹了SpringBoot實(shí)現(xiàn)多數(shù)據(jù)源的切換,本文基于AOP來實(shí)現(xiàn)數(shù)據(jù)源的切換,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下
    2022-03-03
  • mybatis中的setting配置詳解

    mybatis中的setting配置詳解

    這篇文章主要給大家介紹了關(guān)于mybatis中setting配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Spring Boot @Conditional注解使用示例詳解

    Spring Boot @Conditional注解使用示例詳解

    在SpringBoot中,@Conditional注解用于條件性地注冊bean,根據(jù)某些條件決定是否創(chuàng)建特定bean,可以實(shí)現(xiàn)Condition接口并重寫matches方法來定義條件,本文介紹Spring Boot @Conditional注解的相關(guān)知識,感興趣的朋友一起看看吧
    2024-12-12
  • 解析java中super的用法分析

    解析java中super的用法分析

    本篇文章是對java中super的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Spring Boot 整合 TKMybatis 二次簡化持久層代碼的實(shí)現(xiàn)

    Spring Boot 整合 TKMybatis 二次簡化持久層代碼的實(shí)現(xiàn)

    這篇文章主要介紹了Spring Boot 整合 TKMybatis 二次簡化持久層代碼的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 一文帶你徹底了解Java8中的Lambda,函數(shù)式接口和Stream

    一文帶你徹底了解Java8中的Lambda,函數(shù)式接口和Stream

    這篇文章主要為大家詳細(xì)介紹了解Java8中的Lambda,函數(shù)式接口和Stream的用法和原理,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08

最新評論

浏阳市| 曲沃县| 泗阳县| 乳源| 盱眙县| 峨边| 门源| 铜山县| 修水县| 龙陵县| 抚顺县| 苍南县| 汝州市| 仙居县| 兴安县| 十堰市| 桐庐县| 麻栗坡县| 湖南省| 文昌市| 丰城市| 莱州市| 河池市| 绥芬河市| 寻甸| 方正县| 曲靖市| 东海县| 霞浦县| 麻栗坡县| 耒阳市| 霍林郭勒市| 吴堡县| 长宁县| 嘉定区| 唐河县| 墨竹工卡县| 镇沅| 桐城市| 武穴市| 双桥区|