一篇文章看懂Java異常處理
異常的定義
在java中,異常就是java在編譯、運行或運行過程中出現(xiàn)的錯誤
總共有三種:1.編譯錯誤 2.運行錯誤 3.邏輯錯誤
1.編譯錯誤是因為程序沒有遵循語法規(guī)則,編譯程序能夠自己發(fā)現(xiàn)并且提示我們錯誤的原因和位置,這個也是新手在剛接觸編程語言時經(jīng)常遇到的問題。
2.運行時錯誤是因為程序在執(zhí)行時,運行環(huán)境發(fā)現(xiàn)了不能執(zhí)行的操作。
3.邏輯錯誤是因為程序沒有按照預(yù)期的邏輯順序執(zhí)行。異常也就是指程序運行時發(fā)生錯誤,而異常處理就是對這些錯誤進行處理和控制。
package org.oracle.test;
public class TryDemo9 {
public static void main(String[] args) {
System.out.println(1/0);//0不能做除數(shù)
System.out.println("你好");//程序捕獲異常,程序終止,不執(zhí)行
}
}

在代碼執(zhí)行過程中遇到異常就會終止
運行的結(jié)果里會告訴我們異常的類型,異常出現(xiàn)的位置
異常的分類

RuntimeException:運行時異常,一般不手動處理,出問題了再處理。
其他Exception:必須要經(jīng)過手動處理。
Error:一般指的是系統(tǒng)級錯誤。
異常的處理方法
try…catch處理
package org.oracle.test;
import java.util.Scanner;
public class TryDemo2 {
public static void main(String[] args) {
System.out.println(testOne());
}
/*
* 當(dāng)try、catch、finally代碼塊中都有return語句,
* 程序無論報錯與否都會執(zhí)行finally里面的renturn語句
*/
public static double testOne() {
try {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入第一個數(shù)字:");
int a = sc.nextInt();
System.out.println("請輸入第二個數(shù)字:");
int b = sc.nextInt();
int result = a / b;
// System.out.println("result:" + result);
System.out.println("執(zhí)行了try塊");
return result;
}catch (Exception e) {
e.printStackTrace();
return 0;
}finally {
return -1000;
}
}
}
運行結(jié)果:

try-- 用于監(jiān)聽。將要被監(jiān)聽的代碼(可能拋出異常的代碼)放在try語句塊之內(nèi),當(dāng)try語句塊內(nèi)發(fā)生異常時,異常就被拋出。
catch-- 用于捕獲異常。catch用來捕獲try語句塊中發(fā)生的異常。
finally-- finally語句塊總是會被執(zhí)行。它主要用于回收在try塊里打開的物力資源(如數(shù)據(jù)庫連接、網(wǎng)絡(luò)連接和磁盤文件)。
throw 和throws
throws表示方法準(zhǔn)備要扔出來一個異常
throw表示向外拋出異常
package org.oracle.test;
import java.util.InputMismatchException;
public class TryDemo8 {
public static void main(String[] args) {
try {
testThree();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public static void testOne() throws InputMismatchException{
throw new InputMismatchException();
}
public static void testTwo() throws Exception {
try {
testOne();
} catch (InputMismatchException e) {
throw new Exception("新異常1",e);
}
}
public static void testThree() throws Exception {
try {
testTwo();
} catch (Exception e) {
Exception e1 = new Exception("新異常2");
e1.initCause(e);
throw e1;
}
}
}
運行結(jié)果:

自定義異常
自定義異常:直接繼承Exception或者RuntimeException來是實現(xiàn)自定義異常
package org.oracle.test;
import java.util.Scanner;
public class TryDemo6 {
public static void main(String[] args){
try {
hotelRule();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 基帝開了個情侶酒店,基帝酒店規(guī)矩:18歲以下和80歲上以上客戶,需要家人陪同入住
*/
public static void hotelRule() throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入客戶年齡:");
int age = sc.nextInt();
if(age < 18 || age > 80) {
throw new HotelException();
}else {
System.out.println("成功入住");
}
}
}
package org.oracle.test;
/*
* 自定義異常需繼承Exception
*/
public class HotelException extends Exception{
public HotelException() {
super("由于年齡問題,無法入住");
}
}
運行結(jié)果:

總結(jié)
到此這篇關(guān)于Java異常處理的文章就介紹到這了,更多相關(guān)Java異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jcl與jul?log4j1?log4j2?logback日志系統(tǒng)機制及集成原理
這篇文章主要介紹了jcl與jul?log4j1?log4j2?logback的集成原理,Apache?Commons-logging?通用日志框架與日志系統(tǒng)的機制,有需要的朋友可以借鑒參考下2022-03-03
Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)詳解
從數(shù)據(jù)結(jié)構(gòu)上看棧和隊列都是線性表,不過是兩種特殊的線性表,棧只允許在的一端進行插人或刪除操作,而隊列只允許在表的一端進行插人操作、而在另一端進行刪除操作,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下2021-08-08
Spring Boot Maven Plugin打包異常解決方案
這篇文章主要介紹了Spring Boot Maven Plugin打包異常解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
java中isEmpty和isBlank的區(qū)別小結(jié)
Java中的isEmpty和isBlank都是用來判斷字符串是否為空的方法,但在不同的情況下有所區(qū)別,具有一定的參考價值,感興趣的可以了解一下2023-09-09
spring cloud 的監(jiān)控turbine-rabbitmq的示例
這篇文章主要介紹了spring cloud 的監(jiān)控turbine-rabbitmq的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
springboot HandlerIntercepter攔截器修改request body數(shù)據(jù)的操作
這篇文章主要介紹了springboot HandlerIntercepter攔截器修改request body數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。2021-06-06
SpringBoot動態(tài)修改yml配置文件的方法詳解
這篇文章主要為大家詳細介紹了SpringBoot動態(tài)修改yml配置文件的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03

