1. 程式人生 > >通俗理解執行時異常和非執行時異常(一般異常)

通俗理解執行時異常和非執行時異常(一般異常)

一,異常的概念

Java異常類層次結構圖:
這裡寫圖片描述

Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。

Error(錯誤):是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。大多數錯誤與程式碼編寫者執行的操作無關,而表示程式碼執行時 JVM(Java 虛擬機器)出現的問題。例如,Java虛擬機器執行錯誤(Virtual MachineError),當 JVM 不再有繼續執行操作所需的記憶體資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機器(JVM)一般會選擇執行緒終止。

Exception(異常):是程式本身可以處理的異常。

Exception可以分為checked exceptions和unchecked exceptions

1,unchecked exceptions(執行時異常)都是RuntimeException類及其子類異常,就是我們在開發中測試功能時程式終止,控制檯出現的異常,比如:
NullPointerException(空指標異常)、
IndexOutOfBoundsException(下標越界異常)
ClassCastException(類轉換異常)
ArrayStoreException(資料儲存異常,運算元組時型別不一致)
IO操作的BufferOverflowException異常

2, checked exceptions,非執行時異常 (編譯異常):是RuntimeException以外的異常,型別上都屬於Exception類及其子類。從程式語法角度講是必須進行處理的異常,如果不處理,程式就不能編譯通過。如IOException、SQLException等以及使用者自定義的Exception異常,一般情況下不自定義檢查異常。
通俗的話說就是在寫程式碼時出現紅線,需要try catch或者throws時出現的異常。

二,關於異常的題

1,執行時異常與一般異常有何異同?

異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。

2,error和exception有什麼區別?

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。 exception 表示一種設計或實現問題。也就是說,它表示如果程式執行正常,從不會發生的情況。

3,Java中的異常處理機制的簡單原理和應用。

異常是指java程式執行時(非編譯)所發生的非正常情況或錯誤,與現實生活中的事件很相似,現實生活中的事件可以包含事件發生的時間、地點、人物、情節等資訊,可以用一個物件來表示,Java使用面向物件的方式來處理異常,它把程式中發生的每個異常也都分別封裝到一個物件來表示的,該物件中包含有異常的資訊。
Java對異常進行了分類,不同型別的異常分別用不同的Java類表示,所有異常的根類為java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception,Error 表示應用程式本身無法克服和恢復的一種嚴重問題,程式只有死的份了,例如,說記憶體溢位和執行緒死鎖等系統問題。Exception表示程式還能夠克服和恢復的問題,其中又分為系統異常和普通異常,系統異常是軟體本身缺陷所導致的問題,也就是軟體開發人員考慮不周所導致的問題,軟體使用者無法克服和恢復這種問題,但在這種問題下還可以讓軟體系統繼續執行或者讓軟體死掉,例如,陣列指令碼越界(ArrayIndexOutOfBoundsException),空指標異常(NullPointerException)、類轉換異常(ClassCastException);普通異常是執行環境的變化或異常所導致的問題,是使用者能夠克服的問題,例如,網路斷線,硬碟空間不夠,發生這樣的異常後,程式不應該死掉。
java為系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try..catch處理或用throws宣告繼續拋給上層呼叫方法處理,所以普通異常也稱為checked異常,而系統異常可以處理也可以不處理,所以,編譯器不強制用try..catch處理或用throws宣告,所以系統異常也稱為unchecked異常。

提示答題者:就按照三個級別去思考:虛擬機器必須宕機的錯誤,程式可以死掉也可以不死掉的錯誤,程式不應該死掉的錯誤;

4,請寫出你最常見到的5個runtime exception。



ArithmeticException——由於除數為0引起的異常; 
ArrayStoreException——由於陣列儲存空間不夠引起的異常; 
ClassCastException—一當把一個物件歸為某個類,但實際上此物件並不是由這個類 建立的,也不是其子類建立的,則會引起異常; 
IllegalMonitorStateException——監控器狀態出錯引起的異常; 
NegativeArraySizeException—一陣列長度是負數,則產生異常; 
NullPointerException—一程式試圖訪問一個空的陣列中的元素或訪問空的物件中的 方法或變數時產生異常; 
OutofMemoryException——用new語句建立物件時,如系統無法為其分配記憶體空 間則產生異常; 
SecurityException——由於訪問了不應訪問的指標,使安全性出問題而引起異常; 
IndexOutOfBoundsExcention——由於陣列下標越界或字串訪問越界引起異常; 
IOException——由於檔案未找到、未開啟或者I/O操作不能進行而引起異常; 
ClassNotFoundException——未找到指定名字的類或介面引起異常; 
CloneNotSupportedException——一程式中的一個物件引用Object類的clone方法,但 此物件並沒有連線Cloneable介面,從而引起異常; 
InterruptedException—一當一個執行緒處於等待狀態時,另一個執行緒中斷此執行緒,從 而引起異常,有關執行緒的內容,將在下一章講述; 
NoSuchMethodException一所呼叫的方法未找到,引起異常; 
Illega1AccessExcePtion—一試圖訪問一個非public方法; 
StringIndexOutOfBoundsException——訪問字串序號越界,引起異常; 
ArrayIdexOutOfBoundsException—一訪問陣列元素下標越界,引起異常; 
NumberFormatException——字元的UTF程式碼資料格式有錯引起異常; 
IllegalThreadException—一執行緒呼叫某個方法而所處狀態不適當,引起異常; 
FileNotFoundException——未找到指定檔案引起異常; 
EOFException——未完成輸入操作即遇檔案結束引起異常。

相關推薦

通俗理解執行異常執行異常一般異常

一,異常的概念 Java異常類層次結構圖: Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。 Error(錯誤):是程式無法處理的錯誤,表示執行

執行異常執行異常一般異常的區別

一,異常的概念 Java異常類層次結構圖: Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。 Error(錯誤):是程式無法處理的錯誤,表示執行應用程式中較嚴重問題。大多數錯誤與程式碼編

每天一道面試題-執行異常執行異常-你分清楚了嗎?

面試中,經常會遇到這樣的情況,問:談談執行時異常和非執行時異常?答:執行時異常是指程式執行時發生的異常問:那麼非執行時異常又是什麼時候發生?答:。。。。。。問:請羅列幾個常見的執行時異常?答:空指標異常,IOException,SQLException,陣列越界異常。。。。以

java異常執行異常執行異常

RuntimeException RunntimeException的子類: ClassCastException 多型中,可以使用Instanceof 判斷,進行規避

Java執行異常執行異常

1.Java異常機制 Java把異常當做物件來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。Java中的異常分為兩大類:錯誤Error和異常Exception,Java異常體系結構如下圖所示: 圖片來源:http://blog.c

java中執行緒安全執行緒安全的集合

  執行緒安全 非執行緒安全 Collection Vector ArrayList、LinkedList   H

關於JVM記憶體,執行緒共享執行緒共享。

寫部落格的目的是為了自己學習和複習,許多解釋來自於網上大牛,文章非原創。能幫助到別人當然更好不過,水平有限,可能有許多錯誤,歡迎指正。 什麼是JVM? 所謂JVM就是JAVA虛擬機器(Java Virtual Machine)。這也正是Jav

為什麼JVM記憶體區域分為執行緒共享執行緒共享

大多數 JVM 將記憶體區域劃分為 Method Area(Non-Heap)(方法區) ,Heap(堆) , Program Counter Register(程式計數器) , VM Stack(虛擬機器棧,也有翻譯成JAVA 方法棧的),Native M

PHP版本中執行緒安全執行緒安全的區別

Windows版的PHP從版本5.2.1開始有Thread Safe(c之分,這兩者不同在於何處?到底應該用哪種?這裡做一個簡單的介紹。 從2000年10月20日釋出的第一個Windows版的PHP3.0.17開始的都是執行緒安全的版本,這是由於與Linux/Unix系統

Java多執行緒:執行緒安全執行緒安全的集合物件

轉載:https://blog.csdn.net/u011389474/article/details/54602812一、概念:執行緒安全:就是當多執行緒訪問時,採用了加鎖的機制;即當一個執行緒訪問該類的某個資料時,會對這個資料進行保護,其他執行緒不能對其訪問,直到該執行緒

斐波拉契數列的遞迴遞迴寫法c/java

C語言版本:#include <stdio.h> long fib(long n) { if(n<=2) return(1); if(n>=3) return(fi

Java檢查異常檢查異常執行異常執行異常的區別

Java把所有的非正常情況分為兩種:異常(Exception)和錯誤(Error),它們都繼承Throwable父類。  Java的異常(Exception和Error)分為檢查異常和非檢查的異常。 其中根據Exception異常進行分類,可分為執行時異常和非執行時異常。   檢查

Java checked 異常 RuntimeException(執行異常)

目錄 一、執行時異常 1、什麼是RuntimeExceptioin 2、執行時異常的特點 3、如何運用執行時異常 二、執行時異常和ckecked異常的區別 1、機制上 2、邏輯上

執行異常執行異常的區別

java執行時異常是可能在java虛擬機器正常工作時丟擲的異常。 java提供了兩種異常機制。一種是執行時異常(RuntimeExepction),一種是檢查式異常(checked execption)(非執行時異常)。 檢查式異常:我們經常遇到的IO異常及sql異常就屬於

對檢查性異常檢查性異常理解

強制 bsp 處理異常 代碼 cat cnblogs alt 多線程 學習 從開始學習Java,就學習了異常處理,知道異常分為檢查性異常和非檢查性異常,RuntimeException屬於非檢查性異常,知道異常的分類。但工作之前沒有很多的實際應用,知識書本上課件上的定義,

Java運行異常運行異常

try-catch color 表示 finally mar 相關 strong AS str 1.Java異常機制 Java把異常當做對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。Java中的異常分為兩大類:錯誤Error和異常Exc

JAVA中的執行緒安全與執行緒安全理解

執行緒安全性不是一個非真即假的命題。 Vector 的方法都是同步的,並且 Vector 明確地設計為在多執行緒環境中工作。但是它的執行緒安全性是有限制的,即在某些方法之間有狀態依賴(類似地,如果在迭代過程中 Vector 被其他執行緒修改,那麼由 Vector.iterator() 返回的 itera

理解GCD中任務佇列執行的原理

我們都知道IOS中常用於處理執行緒的三種方式:NSThread、NSOperation、GCD,而GCD有很好的的優點就是不需要我們來處理runLoop的執行迴圈,它是一套基於C的併發程式設計(但是強調一下GCD並不能理解為多執行緒,因為這個並不是自己來控制執行緒),

4.Netty執行IO事件IO任務

回顧NioEventLoop的run方法流程 IO事件與非IO任務 處理IO事件 處理非IO任務 聚合定時任務到普通任務佇列 從普通佇列中獲取任務 計算任務執行的超時時間 安全執行 計算是否超時 總結 回顧NioEventLoop的run方法流程 上文說到NioEventLoop的run方法可以

.Net轉Java.03.受查異常受查異常

控制 cli 編譯 time 語法 ring rest body div 轉到Java以後發現一個很妖的事情,為啥有些方法後邊有個 throws XXXXException 比如下面的代碼 @Override public <T> Re