欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java異常(Exception)處理以及常見(jiàn)異常總結(jié)

 更新時(shí)間:2021年10月15日 11:44:19   作者:java李楊勇  
在《Java編程思想》中這樣定義異常,阻止當(dāng)前方法或作用域繼續(xù)執(zhí)行的問(wèn)題,雖然java中有異常處理機(jī)制,但是要明確一點(diǎn),決不應(yīng)該用"正常"的態(tài)度來(lái)看待異常,這篇文章主要給大家介紹了關(guān)于Java異常(Exception)處理以及常見(jiàn)異常的相關(guān)資料,需要的朋友可以參考下

前言

很多事件并非總是按照人們自己設(shè)計(jì)意愿順利發(fā)展的,經(jīng)常出現(xiàn)這樣那樣的異常情況。例如: 你計(jì)劃周末郊游,計(jì)劃從家里出發(fā)→到達(dá)目的→游泳→燒烤→回家。但天有不測(cè)風(fēng)云,當(dāng)你準(zhǔn)備燒烤時(shí)候突然天降大雨,只能終止郊游提前回家?!疤旖荡笥辍笔且环N異常情況,你的計(jì)劃應(yīng)該考慮到這樣的情況,并且應(yīng)該有處理這種異常的預(yù)案。

計(jì)算機(jī)程序的編寫(xiě)也需要考慮處理這些異常情況。異常(exception)是在運(yùn)行程序時(shí)產(chǎn)生的一種異常情況,已經(jīng)成為了衡量一門(mén)語(yǔ)言是否成熟的標(biāo)準(zhǔn)之一。目前的主流編程語(yǔ)言java也提供了異常處理機(jī)制。

異常簡(jiǎn)介

Java中的異常又稱(chēng)為例外,是一個(gè)在程序執(zhí)行期間發(fā)生的事件,它中斷正在執(zhí)行程序的正常指令流。為了能夠及時(shí)有效地處理程序中的運(yùn)行錯(cuò)誤,必須使用異常類(lèi),這可以讓程序具有極好的容錯(cuò)性且更加健壯。 

在 Java 中一個(gè)異常的產(chǎn)生,主要有如下三種原因:

  1. Java 內(nèi)部錯(cuò)誤發(fā)生異常,Java 虛擬機(jī)產(chǎn)生的異常。
  2. 編寫(xiě)的程序代碼中的錯(cuò)誤所產(chǎn)生的異常,例如空指針異常、數(shù)組越界異常等。
  3. 通過(guò) throw 語(yǔ)句手動(dòng)生成的異常,一般用來(lái)告知該方法的調(diào)用者一些必要信息。

Java 通過(guò)面向?qū)ο蟮姆椒▉?lái)處理異常。在一個(gè)方法的運(yùn)行過(guò)程中,如果發(fā)生了異常,則這個(gè)方法會(huì)產(chǎn)生代表該異常的一個(gè)對(duì)象,并把它交給運(yùn)行時(shí)的系統(tǒng),運(yùn)行時(shí)系統(tǒng)尋找相應(yīng)的代碼來(lái)處理這一異常。

我們把生成異常對(duì)象,并把它提交給運(yùn)行時(shí)系統(tǒng)的過(guò)程稱(chēng)為拋出(throw)異常。運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,直到找到能夠處理該類(lèi)型異常的對(duì)象,這一個(gè)過(guò)程稱(chēng)為捕獲(catch)異常。

例 1

為了更好地理解什么是異常,下面來(lái)看一段非常簡(jiǎn)單的 Java 程序。下面的示例代碼實(shí)現(xiàn)了允許用戶(hù)輸入 1~3 以?xún)?nèi)的整數(shù),其他情況提示輸入錯(cuò)誤。

package io.renren.config;

import java.util.Scanner;
/**
 * Created by LiYangYong 
 */
public class TestException {
    public static void main(String[] args) {
        System.out.println("請(qǐng)輸入您的選擇:(1~3 之間的整數(shù))");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        switch (num) {
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
            default:
                System.out.println("error");
                break;
        }
    }
}

正常情況下,用戶(hù)會(huì)按照系統(tǒng)的提示輸入 1~3 之間的數(shù)字。但是,如果用戶(hù)沒(méi)有按要求進(jìn)行輸入,例如輸入了字母,則程序在運(yùn)行時(shí)將會(huì)發(fā)生異常,運(yùn)行結(jié)果如下所示。

請(qǐng)輸入您的選擇:(1~3 之間的整數(shù))
223sdf
Exception in thread "main" java.util.InputMismatchException
 at java.util.Scanner.throwFor(Scanner.java:864)
 at java.util.Scanner.next(Scanner.java:1485)
 at java.util.Scanner.nextInt(Scanner.java:2117)
 at java.util.Scanner.nextInt(Scanner.java:2076)
 at io.renren.config.TestException.main(TestException.java:11)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:497)
 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1

異常類(lèi)型

為了能夠及時(shí)有效地處理程序中的運(yùn)行錯(cuò)誤,Java 專(zhuān)門(mén)引入了異常類(lèi)。在 Java 中所有異常類(lèi)型都是內(nèi)置類(lèi) java.lang.Throwable 類(lèi)的子類(lèi),即 Throwable 位于異常類(lèi)層次結(jié)構(gòu)的頂層。Throwable 類(lèi)下有兩個(gè)異常分支 Exception 和 Error,如圖 1 所示。

 由圖 2 可以知道,Throwable 類(lèi)是所有異常和錯(cuò)誤的超類(lèi),下面有 Error 和 Exception 兩個(gè)子類(lèi)分別表示錯(cuò)誤和異常。其中異常類(lèi) Exception 又分為運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常,這兩種異常有很大的區(qū)別,也稱(chēng)為不檢查異常(Unchecked Exception)和檢查異常(Checked Exception)。

  • Exception 類(lèi)用于用戶(hù)程序可能出現(xiàn)的異常情況,它也是用來(lái)創(chuàng)建自定義異常類(lèi)型類(lèi)的類(lèi)。
  • Error 定義了在通常環(huán)境下不希望被程序捕獲的異常。一般指的是 JVM 錯(cuò)誤,如堆棧溢出。

本節(jié)不討論關(guān)于 Error 類(lèi)型的異常處理,因?yàn)樗鼈兺ǔJ菫?zāi)難性的致命錯(cuò)誤,不是程序可以控制的。接下來(lái)將討論 Exception 類(lèi)型的異常處理。

運(yùn)行時(shí)異常都是 RuntimeException 類(lèi)及其子類(lèi)異常,如 NullPointerException、IndexOutOfBoundsException 等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般由程序邏輯錯(cuò)誤引起,程序應(yīng)該從邏輯角度盡可能避免這類(lèi)異常的發(fā)生。

非運(yùn)行時(shí)異常是指 RuntimeException 以外的異常,類(lèi)型上都屬于 Exception 類(lèi)及其子類(lèi)。從程序語(yǔ)法角度講是必須進(jìn)行處理的異常,如果不處理,程序就不能編譯通過(guò)。如 IOException、ClassNotFoundException 等以及用戶(hù)自定義的 Exception 異常(一般情況下不自定義檢查異常)。

表 1 和表 2 分別列出了 java.lang 中定義的運(yùn)行時(shí)異常和非運(yùn)行時(shí)異常的類(lèi)型及作用。

異常類(lèi)型 說(shuō)明
ArithmeticException 算術(shù)錯(cuò)誤異常,如以零做除數(shù)
ArraylndexOutOfBoundException 數(shù)組索引越界
ArrayStoreException 向類(lèi)型不兼容的數(shù)組元素賦值
ClassCastException 類(lèi)型轉(zhuǎn)換異常
IllegalArgumentException 使用非法實(shí)參調(diào)用方法
lIIegalStateException 環(huán)境或應(yīng)用程序處于不正確的狀態(tài)
lIIegalThreadStateException 被請(qǐng)求的操作與當(dāng)前線程狀態(tài)不兼容
IndexOutOfBoundsException 某種類(lèi)型的索引越界
NullPointerException 嘗試訪問(wèn) null 對(duì)象成員,空指針異常
NegativeArraySizeException 再負(fù)數(shù)范圍內(nèi)創(chuàng)建的數(shù)組
NumberFormatException 數(shù)字轉(zhuǎn)化格式異常,比如字符串到 float 型數(shù)字的轉(zhuǎn)換無(wú)效
TypeNotPresentException 類(lèi)型未找到
異常類(lèi)型 說(shuō)明
ClassNotFoundException 沒(méi)有找到類(lèi)
IllegalAccessException 訪問(wèn)類(lèi)被拒絕
InstantiationException 試圖創(chuàng)建抽象類(lèi)或接口的對(duì)象
InterruptedException 線程被另一個(gè)線程中斷
NoSuchFieldException 請(qǐng)求的域不存在
NoSuchMethodException 請(qǐng)求的方法不存在
ReflectiveOperationException 與反射有關(guān)的異常的超類(lèi)

總結(jié)

到此這篇關(guān)于Java異常(Exception)處理以及常見(jiàn)異常的文章就介紹到這了,更多相關(guān)Java異常(Exception)處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringController返回值和異常自動(dòng)包裝的問(wèn)題小結(jié)

    SpringController返回值和異常自動(dòng)包裝的問(wèn)題小結(jié)

    今天遇到一個(gè)需求,在不改動(dòng)原系統(tǒng)代碼的情況下,將Controller的返回值和異常包裝到一個(gè)統(tǒng)一的返回對(duì)象中去,下面通過(guò)本文給大家介紹SpringController返回值和異常自動(dòng)包裝的問(wèn)題,需要的朋友可以參考下
    2024-03-03
  • Java中Easypoi實(shí)現(xiàn)excel多sheet表導(dǎo)入導(dǎo)出功能

    Java中Easypoi實(shí)現(xiàn)excel多sheet表導(dǎo)入導(dǎo)出功能

    這篇文章主要介紹了Java中Easypoi實(shí)現(xiàn)excel多sheet表導(dǎo)入導(dǎo)出功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java實(shí)現(xiàn)單例模式的五種方法介紹

    Java實(shí)現(xiàn)單例模式的五種方法介紹

    單例模式確保某個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。在計(jì)算機(jī)系統(tǒng)中,線程池、緩存、日志對(duì)象、對(duì)話框、打印機(jī)、顯卡的驅(qū)動(dòng)程序?qū)ο蟪1辉O(shè)計(jì)成單例
    2023-01-01
  • 深入理解Java8新特性之Lambda表達(dá)式的基本語(yǔ)法和自定義函數(shù)式接口

    深入理解Java8新特性之Lambda表達(dá)式的基本語(yǔ)法和自定義函數(shù)式接口

    Lambda 表達(dá)式,也可稱(chēng)為閉包,它是推動(dòng) Java 8 發(fā)布的最重要新特性。Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。使用 Lambda 表達(dá)式可以使代碼變的更加簡(jiǎn)潔緊湊
    2021-11-11
  • 聊聊springmvc中controller的方法的參數(shù)注解方式

    聊聊springmvc中controller的方法的參數(shù)注解方式

    本篇文章主要介紹了聊聊springmvc中controller的方法的參數(shù)注解方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • MyBatis中OGNL的使用教程詳解

    MyBatis中OGNL的使用教程詳解

    有些人可能不知道MyBatis中使用了OGNL,有些人知道用到了OGNL卻不知道在MyBatis中如何使用,下面這篇文章主要介紹了MyBatis中OGNL的使用教程,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-06-06
  • ReentrantLock源碼詳解--公平鎖、非公平鎖

    ReentrantLock源碼詳解--公平鎖、非公平鎖

    ReentrantLock重入鎖,是實(shí)現(xiàn)Lock接口的一個(gè)類(lèi),也是在實(shí)際編程中使用頻率很高的一個(gè)鎖,表示能夠?qū)蚕碣Y源能夠重復(fù)加鎖,即當(dāng)前線程獲取該鎖再次獲取不會(huì)被阻塞。下面我們來(lái)深入了解一下它吧
    2019-06-06
  • Spring?Boot?應(yīng)用的熱部署配置方法

    Spring?Boot?應(yīng)用的熱部署配置方法

    熱部署,簡(jiǎn)單來(lái)說(shuō),就是代碼修改后不需重啟項(xiàng)目就可自動(dòng)加載出新的內(nèi)容,這篇文章主要介紹了Spring?Boot?應(yīng)用的熱部署配置?,需要的朋友可以參考下
    2022-11-11
  • SpringMVC如何域?qū)ο蠊蚕頂?shù)據(jù)

    SpringMVC如何域?qū)ο蠊蚕頂?shù)據(jù)

    在Spring MVC中,可以使用域?qū)ο髞?lái)共享數(shù)據(jù),域?qū)ο笫且粋€(gè)Map類(lèi)型的對(duì)象,可以在請(qǐng)求處理方法之間共享數(shù)據(jù),本文給大家介紹SpringMVC 域?qū)ο蠊蚕頂?shù)據(jù)的示例代碼,一起看看吧
    2023-09-09
  • Java用BigDecimal解決double類(lèi)型相減時(shí)可能存在的誤差

    Java用BigDecimal解決double類(lèi)型相減時(shí)可能存在的誤差

    這篇文章主要介紹了Java用BigDecimal解決double類(lèi)型相減時(shí)可能存在的誤差,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論