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

Java異常(Exception)處理以及常見(jiàn)異??偨Y(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中的異常又稱為例外,是一個(gè)在程序執(zhí)行期間發(fā)生的事件,它中斷正在執(zhí)行程序的正常指令流。為了能夠及時(shí)有效地處理程序中的運(yùn)行錯(cuò)誤,必須使用異常類,這可以讓程序具有極好的容錯(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ò)程稱為拋出(throw)異常。運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,直到找到能夠處理該類型異常的對(duì)象,這一個(gè)過(guò)程稱為捕獲(catch)異常。

例 1

為了更好地理解什么是異常,下面來(lái)看一段非常簡(jiǎn)單的 Java 程序。下面的示例代碼實(shí)現(xiàn)了允許用戶輸入 1~3 以內(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;
        }
    }
}

正常情況下,用戶會(huì)按照系統(tǒng)的提示輸入 1~3 之間的數(shù)字。但是,如果用戶沒(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

異常類型

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • 利用java操作Excel文件的方法

    利用java操作Excel文件的方法

    以下是對(duì)利用java操作Excel文件的方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • java泛型基本知識(shí)及通用方法

    java泛型基本知識(shí)及通用方法

    這篇文章主要介紹了java泛型基礎(chǔ)知識(shí)及通用方法,從以下幾個(gè)方面介紹一下java的泛型: 基礎(chǔ), 泛型關(guān)鍵字, 泛型方法, 泛型類和接口,感興趣的可以了解一下
    2019-04-04
  • Jmeter工作原理及常見(jiàn)錯(cuò)誤解析

    Jmeter工作原理及常見(jiàn)錯(cuò)誤解析

    這篇文章主要介紹了Jmeter工作原理及常見(jiàn)錯(cuò)誤解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring不能注入Static變量的原因及Spring注入靜態(tài)變量

    Spring不能注入Static變量的原因及Spring注入靜態(tài)變量

    這篇文章主要介紹了Spring不能注入Static變量的原因及Spring注入靜態(tài)變量,需要的朋友可以參考下
    2016-01-01
  • IDEA中request.getParameter爆紅問(wèn)題及解決

    IDEA中request.getParameter爆紅問(wèn)題及解決

    這篇文章主要介紹了IDEA中request.getParameter爆紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring?AI聊天功能開(kāi)發(fā)步驟

    Spring?AI聊天功能開(kāi)發(fā)步驟

    本文給大家介紹Spring?AI聊天功能開(kāi)發(fā)步驟,首先引入依賴,繼承父版本的springboot依賴,最好是比較新的依賴,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • JavaWeb Spring注解Annotation深入學(xué)習(xí)

    JavaWeb Spring注解Annotation深入學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了JavaWeb Spring注解Annotation,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java編程基本概念

    Java編程基本概念

    本文主要介紹了Java編程的基本概念,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • @ComponentScan注解用法之包路徑占位符解析

    @ComponentScan注解用法之包路徑占位符解析

    這篇文章主要介紹了@ComponentScan注解用法之包路徑占位符解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java Swing組件文件選擇器JFileChooser簡(jiǎn)單用法示例

    Java Swing組件文件選擇器JFileChooser簡(jiǎn)單用法示例

    這篇文章主要介紹了Java Swing組件文件選擇器JFileChooser簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Swing組件中的文件選擇器JFileChooser的簡(jiǎn)單使用方法,需要的朋友可以參考下
    2017-11-11

最新評(píng)論

淮南市| 郸城县| 土默特右旗| 专栏| 奎屯市| 英德市| 砀山县| 南充市| 方正县| 桐柏县| 汝南县| 鄂托克前旗| 阿瓦提县| 于都县| 林州市| 亳州市| 晋江市| 阿瓦提县| 关岭| 青神县| 松滋市| 鄂托克前旗| 黔西县| 鹿邑县| 张家川| 潞西市| 新巴尔虎右旗| 阜新市| 汶上县| 曲沃县| 荔浦县| 苏尼特右旗| 长寿区| 开江县| 麻阳| 沙雅县| 汝城县| 金堂县| 芷江| 仙居县| 闵行区|