Java學(xué)習(xí)筆記之異常處理
本文實(shí)例為大家分享了Java異常處理的具體代碼,供大家參考,具體內(nèi)容如下
一.異常的分類
1.由Java虛擬機(jī)拋出的異常(Error):程序無(wú)法處理的問(wèn)題,用戶不用去進(jìn)行處理(虛擬機(jī)錯(cuò)誤丶內(nèi)存溢出錯(cuò)誤丶線程死鎖)
2.Exception異常:程序本身可以進(jìn)行處理的異常
1).非檢查異常(Unchecked Exception):編譯器不需要強(qiáng)制處理的異常(空指針異常丶數(shù)組下標(biāo)越界異常丶算數(shù)異常丶類型轉(zhuǎn)換異常)
2).檢查異常(checked Exception):編譯器需要強(qiáng)制處理的異常(IOException丶SQLException)
二.異常處理的兩種方法
1.通過(guò)try丶catch和finally關(guān)鍵字在當(dāng)前位置進(jìn)行異常處理
public static void main(String[] a){
int sum = 0;
while(true){
try { //以兩數(shù)相除除數(shù)不能為0進(jìn)行舉例
System.out.println("請(qǐng)依次輸入兩個(gè)數(shù)值進(jìn)行除法操作:");
Scanner scanner = new Scanner(System.in);
int one =scanner.nextInt();
int two =scanner.nextInt();
sum = one/two;
System.out.println("最終結(jié)果為:"+sum);
} catch (Exception e) { //用catch將錯(cuò)誤進(jìn)行捕捉,這里可以使用多重catch,對(duì)于不同的錯(cuò)誤進(jìn)行捕捉,但最后的catch建議為Exception。
// TODO Auto-generated catch block //顯示錯(cuò)誤堆棧信息
e.printStackTrace();
}finally{
System.out.print("無(wú)論有沒(méi)有錯(cuò)誤我都會(huì)執(zhí)行"); }
}
}
}
輸出:

2.通過(guò)try丶catch丶finally丶throw和throws拋出異常給函數(shù)調(diào)用者進(jìn)行處理
public class Try {
public static void main(String[] a){
try{
Function(); //在函數(shù)調(diào)用者處對(duì)異常進(jìn)行處理
}catch(Exception e)
{
e.printStackTrace();
}
}
static void Function() throws Exception{ //通過(guò)throws將異常進(jìn)行拋出
System.out.println("請(qǐng)輸入一個(gè)數(shù)值進(jìn)行判斷:");
Scanner scanner = new Scanner(System.in);
int one =scanner.nextInt();
if(one<100)
{
throw new Exception(); //若輸入的數(shù)值小于100則拋出異常
}
}
}
輸出:

3.自定義異常進(jìn)行處理
class MyException extends Exception{ //自定義異常,通過(guò)super方法傳遞異常信息給父級(jí)
public MyException(){
super("這是我自定義的異常");
}
}
public class Try {
public static void main(String[] a){
try{
Function();
}catch(MyException e)
{
e.printStackTrace();
}
}
static void Function() throws MyException{
System.out.println("請(qǐng)輸入一個(gè)數(shù)值進(jìn)行判斷:");
Scanner scanner = new Scanner(System.in);
int one =scanner.nextInt();
if(one<100)
{
throw new MyException(); //將自定義異常進(jìn)行拋出
}
}
}
輸出:

三.異常鏈
有的時(shí)候我們會(huì)在處理一個(gè)異常的時(shí)候拋出一個(gè)新的異常,也就是異常的嵌套,但是最后我們得到的異常信息卻只有一個(gè)。
示例:
public class Try {
public static void main(String[] a){
try{
Function1();
}catch(Exception e)
{
e.printStackTrace();
}
}
static void Function1() throws Exception{
try{
Function2();
}catch(Exception e){
throw new Exception();
}
}
static void Function2() throws Exception{
try{
Function3();
}catch(Exception e){
throw new Exception();
}
}
static void Function3() throws Exception{
throw new Exception();
}
}
輸入結(jié)果:

這樣的話顯示出的異常就只有一個(gè)了,那我們?nèi)绻胱屵@條異常鏈中的所有異常信息全部輸出該怎么辦呢?方法很簡(jiǎn)單,我們?cè)趻伋霎惓5臅r(shí)候?qū)惓?duì)象也當(dāng)作參數(shù)進(jìn)行拋出就行了。
示例:
public class Try {
public static void main(String[] a){
try{
Function1();
}catch(Exception e)
{
e.printStackTrace();
}
}
static void Function1() throws Exception{
try{
Function2();
}catch(Exception e){
throw new Exception("異常2",e);
}
}
static void Function2() throws Exception{
try{
Function3();
}catch(Exception e){
throw new Exception("異常2",e);
}
}
static void Function3() throws Exception{
throw new Exception("異常3");
}
}
運(yùn)行結(jié)果:

到此,我們Java中的異常便是描述完了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Mybatis單個(gè)參數(shù)的if判斷報(bào)異常There is no getter for property named ''xxx'' in ''class java.lang.Integer''的解決方案
- 導(dǎo)入項(xiàng)目出現(xiàn)Java多個(gè)工程相互引用異常A cycle was detected in the build path of project的解決辦法
- java簡(jiǎn)單自定義異常實(shí)例代碼
- Java中內(nèi)存區(qū)域的劃分與異常詳解
- Java如何自定義異常打印非堆棧信息詳解
- Java異常處理的五個(gè)關(guān)鍵字
- 利用Java8 Optional如何避免空指針異常詳解
- 關(guān)于Java中try finally return語(yǔ)句的執(zhí)行順序淺析
- 簡(jiǎn)單談?wù)刯ava的異常處理(Try Catch Finally)
- Java異常處理之try...catch...finally詳解
相關(guān)文章
關(guān)于Jedis的用法以及Jedis使用Redis事務(wù)
這篇文章主要介紹了關(guān)于Jedis的用法以及Jedis使用Redis事務(wù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
springboot2.6.3讀取不到nacos上的配置文件問(wèn)題
這篇文章主要介紹了springboot2.6.3讀取不到nacos上的配置文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
springboot?項(xiàng)目啟動(dòng)后無(wú)日志輸出直接結(jié)束的解決
這篇文章主要介紹了springboot?項(xiàng)目啟動(dòng)后無(wú)日志輸出直接結(jié)束的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能示例
這篇文章主要介紹了java基于AES對(duì)稱加密算法實(shí)現(xiàn)的加密與解密功能,結(jié)合完整實(shí)例形式分析了AES對(duì)稱加密算法的定義與使用技巧,需要的朋友可以參考下2017-01-01
Java 如何快速,優(yōu)雅的實(shí)現(xiàn)導(dǎo)出Excel
這篇文章主要介紹了Java 如何快速,優(yōu)雅的實(shí)現(xiàn)導(dǎo)出Excel,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下2021-03-03
springboot項(xiàng)目中的bootstrap.yml配置不生效的原因及解決(沒(méi)有自動(dòng)提示)
新創(chuàng)建一個(gè) springboot項(xiàng)目,添加了 bootstrap.yml 文件,發(fā)現(xiàn)文件并沒(méi)有如預(yù)期變成綠色葉子,編寫的時(shí)候也沒(méi)有自動(dòng)提示,啟動(dòng)的時(shí)候,發(fā)現(xiàn)端口是8080,由此發(fā)現(xiàn)配置并沒(méi)有生效,所以本文給大家講解了springboot項(xiàng)目中的bootstrap.yml配置不生效的原因及解決2024-01-01
Java實(shí)現(xiàn)替換集合中的元素的方法詳解
這篇文章主要為大家詳細(xì)介紹了Java中實(shí)現(xiàn)替換集合中的元素的常見(jiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
Springcloud Config支持本地配置文件的方法示例
這篇文章主要介紹了Springcloud Config支持本地配置文件的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
java轉(zhuǎn)換時(shí)區(qū)時(shí)間過(guò)程詳解
這篇文章主要介紹了java轉(zhuǎn)換時(shí)區(qū)時(shí)間過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

