JAVA語言異常,Java語言中的異常

1、異常分類

從產生源頭來看,Java語言中的異常可以分為兩類:

JVM拋出的異常。比如:訪問null引用會引發NullPointerException;0作為除數,如9/0,JVM會拋出ArithmeticException;內存消耗完,申請分配失敗,JVM會拋出OutOfMemoryError。

注意:這些JVM的異常也可以在java代碼中顯式拋出(盡管我們很少這么做,基本也沒有必要),如下例子中的代碼可以正常編譯。

public class Test {

public static void main(String []args){

String s = null;

if (s == null) {

throw new NullPointerException("Exception: s should not be null");

}

throw new OutOfMemoryError();

}

}

除了JVM的異常,其他異常都是程序引起的,是程序中顯式通過throw語句拋出的。

比如,在Long.parseLong(String s, int radix)的源碼中包含如下代碼:

if (s == null) {

throw new NumberFormatException("null");

}

也就是說,方法會拋出NumberFormatException異常。

一般情況下,jvm異常是由jvm拋出的,不會被開發者顯式拋出。當然,也可以在程序中通過throw語句顯式拋出jvm異常。如下:

if (s == null) {

throw new NullPointerException(“s can not be null”);

}

所有的jvm異常都是unchecked,而程序中的異常則unchecked和checked都有。

2、異常類的繼承層次

Java語言中的類繼承層次如下圖:

f083c46d424e

Java異常層次

Throwable有兩個子類Exception和Error。其中:

Exception是和應用相關的,NullPointerException出現在當試圖訪問空對象的時候,ClassCastException出現在試圖轉換不兼容的類型時。可以通過try catch語句捕獲Exception之后處理,可以讓程序恢復運行。

Error是和應用運行的環境相關的,比如OutOfMemoryError出現在jvm內存耗盡的時候、StackOverflowError出現在棧溢出的時候。正因為如此,程序基本不可能在Error發生時恢復,所以,Error不能被try catch語句處理。

從這個圖中可以看出,類也分為Checked異常和Unchecked異常。

Checked異常是java編譯器強制處理的異常,必須通過try catch語句捕獲,或者通過throws語句拋出。如果顯式不處理,就會編譯報錯。比如網絡連接失敗的時候,會拋出IOException,程序應該提前預料并對這個異常做出恰當的處理,比如在網絡中斷時重新傳輸文件,這樣程序才不會因為異常終止運行,崩潰掛掉。

Unchecked異常通常是開發者代碼邏輯錯誤造成的:如NullPointerException(通常在程序設計時通過檢查引用是否為空避免);如一些是java.lang.Error的子類,在任何一個實例對象創建的時候都有可能發生OutOfMemoryError(但是,我們不可能在每一個創建對象實例的地方都用try catch捕獲這個異常,因為這個異常是unchecked,在實際編程中也無需這么做)。通常來說,unchecked異常是無法預料,編譯器無法檢測的異常。

3、checked和unchecked異常

自定義的異常是checked,還是unchecked取決于繼承的父類是checked異常,還是unchecked異常。

try catch塊中catch的checked異常,必須在try塊中有出現這種異常的可能性,不然編譯不通過。但是,Throwable和Exception這兩個類有些特殊,盡管他們是checked異常,不過,即使在try塊中沒有出現該異常的可能性,依然可以捕獲它們。因為他們都有unchecked異常子類(如RuntimeException),編譯器不檢查unchecked異常,也就允許這樣捕獲unchecked異常。

參考資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540930.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Mybatis Generator結合Ant腳本快速自動生成Model、Mapper等文件的方法

新建generatorConfig.xml和build_mybatis.xml&#xff1a; jar下載 <dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.2</version></dependency> <depe…

java bitset_Java BitSet or()方法與示例

java bitsetBitSet類或()方法 (BitSet Class or() method) or() method is available in java.util package. or()方法在java.util包中可用。 or() method is used to perform logical OR between this BitSet and the given BitSet(bs). This BitSet is updated when either t…

matlab 細化函數,MATLAB圖像處理工具箱函數(細化篇).doc

MATLAB圖像處理工具箱函數(細化篇)第3章 MATLAB數字圖像處理工具箱3.1 MATLAB圖像預處理3.1.1 圖像處理的基本操作1. 讀入并顯示一幅圖像clear %清除所有的工作平臺變量close all %關閉已打開的圖形窗口Iimread (pout.tif); %讀取圖像pout.tif(該圖像是圖像處理工具箱自帶的圖像…

STM32啟動解析

啟動方式對的不同下載模式 STM32可以通過BOOT引腳的配置&#xff0c;來選擇不同的啟動模式------對應不同的下載方式。 仿真器下載—— 內部FLASH的啟動方式 串口下載 —— 系統存儲器的啟動方式 內部SRAM一般不用&#xff0c;不講 啟動過程 以內部FLASH的啟動方式為例&am…

OpenBSD基金會收到錘子科技約140萬捐贈款

11月26日消息&#xff0c;給開源項目捐款一向是錘子科技發布會的傳統&#xff0c;去年發布會的門票收入捐給了國人章亦春主導的開源項目OpenResty。今年&#xff0c;錘子科技選擇將收益捐贈給OpenBSD基金會。OpenBSD基金會收到錘子科技約140萬捐贈款 OpenBSD基金會11月23日發布…

自動化部署kvm虛擬機_自動化虛擬助手

自動化部署kvm虛擬機The automated virtual assistant or commonly called personal assistants, are developed to serve its users by performing some tasks, setting reminders and much more based on the input is given and local awareness. It is integrated with a l…

php 數據庫編碼,php怎么設置數據庫編碼方式

在php中&#xff0c;可以使用mysql_query()函數來設置mysql數據庫的編碼方式&#xff1b;具體方法&#xff1a;在mysql_connect()語句之后添加“mysql_query("set names 編碼方式");”代碼即可。本教程操作環境&#xff1a;windows7系統、PHP7.1版&#xff0c;DELL G…

mysql截取字符串與reverse函數

mysql的函數大全&#xff1a; http://www.jb51.net/Special/606.htm 這個網頁上很多知識點&#xff0c;可以學習下&#xff0c;關于mysql的函數&#xff0c;也可以作為API查詢&#xff1a; 這里只說下mysql的截取函數和reverse函數&#xff1a; MySQL 字符串截取函數&#xff1…

flask sql外鍵使用_如何在SQL中使用外鍵?

flask sql外鍵使用Basically, Foreign Key represents relationship between tables. 基本上&#xff0c; 外鍵代表表之間的關系 。 Syntax: 句法&#xff1a; column-name data_type (size) CONSTRAINT constraint-name References Table-name (Column-name)Example: 例&a…

php發展歷,PHP的發展歷程

PHP的發展歷程了解一門語言&#xff0c;我們必須知道這門語言的發展史&#xff0c;現在我通過版本的變化以時間軸的形式來說明PHP的發展歷程。1.1995年初PHP1.0誕生Rasmus Lerdof發明了PHP&#xff0c;這是簡單的一套Perl腳本&#xff0c;用來跟蹤訪問者的信息。這個時候的PHP只…

中國互聯網安全大會將召開 網絡安全再獲關注

從2016中國互聯網安全大會籌委會獲悉&#xff0c;將于8月16日在國家會議中心召開的第四屆中國互聯網安全大會籌備工作已全部就緒。 據經濟參考報7月15日消息&#xff0c;中國網絡空間安全協會副理事長、360公司總裁兼企業安全集團董事長齊向東表示&#xff0c;此次中國互聯網安…

合并排序算法排序過程_外部合并排序算法

合并排序算法排序過程外部分類 (External sorting) External sorting is a technique in which the data is stored on the secondary memory, in which part by part data is loaded into the main memory and then sorting can be done over there. Then this sorted data wi…

php榛子云短信驗證,java + maven +榛子云短信 實現發送短信驗證碼功能

如何使用java maven的項目環境發送短信驗證碼&#xff0c;本文使用的是榛子云短信的接口。下載下來是jar文件&#xff0c;需要將jar發布到本地的maven倉庫中&#xff0c; 在cmd環境下輸入:mvn install:install-file -DgroupIdcom.zhenzi -DartifactIdsms -Dversion1.0.0 -Dpac…

django css_在應用程序上實現CSS Django的

django cssCSS (Cascade Style Sheets) are used to implement design. CSS(級聯樣式表)用于實現設計。 Step 1: Create a Sandbox, Activate it, Install Django and Create Sample Project 步驟1&#xff1a;創建一個沙箱&#xff0c;將其激活&#xff0c;安裝Django并創建示…

PHPWeb開發入門體驗學習筆記

PHPWeb開發入門體驗學習筆記4一、PHP web應用開發須知1.入門要點程序員三個階段&#xff1a;碼農&#xff08;速成技能&#xff09;->工程師&#xff08;長期知識&#xff09;->專家&#xff08;研究論文&#xff09;編程三要素&#xff1a;聲明變量&#xff08;系統、全…

vb mysql 表格顯示,在VB中編輯數據庫和電子表格

在VB50中有很多功能強大的控件&#xff0c;其中數據控件與一些綁定控件(如文本框&#xff0c;圖片框及 ActiveX控件)的相互協作&#xff0c;能夠方便地實現對各種數據庫記錄、表格乃至電子表格的瀏覽和編輯操作。下面介紹實例&#xff0c;其中數據控件用于記錄的瀏覽、移動、…

c# datetime._C#| DateTime.AddTicks()方法與示例

c# datetime.DateTime.AddTicks()方法 (DateTime.AddTicks() Method) DateTime.AddTicks() method is used to return a new date-time object that adds ticks value of this instance. This object does not change the original value of date-time but it returns an objec…

12345組成三個不重復數java,求大神幫忙!五子棋!只能識別按順序識別!例如 12345 不能...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓import java.util.Arrays;import java.util.Scanner;public class Gobang {public static void main(String[] args) {Scanner sc new Scanner(System.in);boolean finish false;// 有戲是否結束int flagNum 1;// 當前下棋者標記…

[轉]Visual Studio 各版本下載

原文地址&#xff1a;[置頂] Visual Studio 各版本下載 文件名稱文件大小百度網盤下載微軟官方下載Visual Studio 2015 Enterprise - 企業版 - 簡體中文3.89GBhttp://pan.baidu.com/s/1bnAY68Bvs2015.ent_chs.isoVisual Studio 2015 Professional - 專業版 - 簡體中文3.84GBht…

JavaScript中的“ this”關鍵字

JavaScriptthis關鍵字 (JavaScript this keyword) The this keyword is widely used in JavaScript. It has many use cases and is also one of the most intimidating features of JavaScript. In most of the programming languages, this is used to refer to the current …