Java學(xué)習(xí)筆記之異常處理
本文實(shí)例為大家分享了Java異常處理的具體代碼,供大家參考,具體內(nèi)容如下
一.異常的分類(lè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ù)異常丶類(lèi)型轉(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 { //以?xún)蓴?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)文章
使用SpringBoot實(shí)現(xiàn)自動(dòng)發(fā)送注冊(cè)驗(yàn)證碼郵件功能
一直以來(lái),我都對(duì)程序如何自動(dòng)發(fā)送郵件感到好奇,想象一下,當(dāng)你在某個(gè)網(wǎng)站注冊(cè)時(shí),輸入郵箱后不久就收到一封帶有驗(yàn)證碼的郵件,這種體驗(yàn)既方便又高效,所以本文給大家介紹了如何用?Spring?Boot?實(shí)現(xiàn)自動(dòng)發(fā)送注冊(cè)驗(yàn)證碼郵件,需要的朋友可以參考下2025-04-04
Spark使用IDEA編寫(xiě)wordcount的示例演示
這篇文章主要介紹了Spark使用IDEA編寫(xiě)wordcount的示例演示,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
Netty分布式高性能工具類(lèi)異線程下回收對(duì)象解析
這篇文章主要介紹了Netty分布式高性能工具類(lèi)異線程下回收對(duì)象解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
java8 stream自定義分組求和并排序的實(shí)現(xiàn)
這篇文章主要介紹了java8 stream自定義分組求和并排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法
這篇文章主要介紹了Java實(shí)現(xiàn)導(dǎo)出ZIP壓縮包的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
JetBrains IntelliJ IDEA 優(yōu)化教超詳細(xì)程
這篇文章主要介紹了JetBrains IntelliJ IDEA 優(yōu)化教超詳細(xì)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java?Jar包項(xiàng)目?jī)?nèi)存設(shè)置方法舉例
這篇文章主要給大家介紹了關(guān)于Java?Jar包項(xiàng)目?jī)?nèi)存設(shè)置方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-01-01

