Java中try-catch的使用及注意細(xì)節(jié)
引言
?? Java中提供 try 和catch塊來處理異常。try塊用于包含可能出錯(cuò)的代碼。catch塊用于處理try塊中發(fā)生的異常??梢愿鶕?jù)需要在程序中有多個(gè)try…catch塊。
1. 基本語法
try{
//可疑代碼
//將異常生成對(duì)象的異常對(duì)象傳遞給catch塊
}catch(異常){
//對(duì)異常進(jìn)行處理
}finally{
} //可以沒有finally2. 注意細(xì)節(jié)
- 如果異常發(fā)生了,則異常發(fā)生后面的代碼不會(huì)執(zhí)行,直接進(jìn)入到catch塊
- 如果異常沒有發(fā)生,則順序執(zhí)行try的代碼塊,不會(huì)進(jìn)入到catch
- 如果希望發(fā)不發(fā)生異常都進(jìn)入到某段代碼段 例如:關(guān)閉數(shù)據(jù)庫的連接,則使用 finally{ }
public static void main(String[] args) {
//ctrl + alt +t
try {
String str = "123";
int a = Integer.parseInt(str);
System.out.println(a);
} catch (NumberFormatException e) {
System.out.println("異常信息" + e.getMessage());
}finally {
System.out.println("finally代碼塊被執(zhí)行");
}
System.out.println("程序繼續(xù)");
}運(yùn)行結(jié)果為:

當(dāng)更改為"abc"時(shí)

語句時(shí)再次運(yùn)行:

4.可以有多個(gè)catch語句,捕捉不同的異常(進(jìn)行不同的業(yè)務(wù)處理),要求父類異常在后,子類異常在前,比如Exception 在后 ,NullPointerException在前,如果發(fā)生異常,只會(huì)匹配一個(gè)catch
public class TryCatchDetai {
public static void main(String[] args) {
try {
Person person = new Person();
person = null;
System.out.println(person.getName());
int n1 = 10;
int n2 = 0;
int res = n1/n2;
}catch (NullPointerException e){
System.out.println("空指針異常 " + e.getMessage());
}
catch (Exception e){
System.out.println("算術(shù)異常" + e.getMessage());
}finally {
}
}
}
class Person{
private String name = "yayaya";
public String getName(){
return name;
}
}
運(yùn)行的結(jié)果為:
但是實(shí)際上還有一個(gè)異常為算術(shù)異常 及分母不能為0,因?yàn)橐呀?jīng)找到一個(gè)異常就不會(huì)捕獲下一個(gè)異常。
將person = null;代碼注銷。
再次運(yùn)行:
如果更改獲取異常的順序,編譯器就會(huì)報(bào)錯(cuò)。所以父類異常需要在后,子類異常需要在前。
5.可以進(jìn)行try-finally 配合使用,這種用法相當(dāng)于沒有捕獲異常
所以程序會(huì)崩潰。但是finally一定會(huì)執(zhí)行,例如:需要關(guān)閉數(shù)據(jù)庫,一些必須要執(zhí)行的代碼
public class TryCatchDetail02 {
public static void main(String[] args) {
try {
int n1 = 10000;
int n2 = 0;
System.out.println(n1/n2);
}finally {
System.out.println("執(zhí)行finally");
}
System.out.println("程序繼續(xù)運(yùn)行");
}
}當(dāng)程序運(yùn)行到n1/n2時(shí)候會(huì)報(bào)錯(cuò),這個(gè)時(shí)候會(huì)先執(zhí)行finally語句,執(zhí)行完之后就崩潰。??!
運(yùn)行結(jié)果為:

快捷鍵
全選住代碼 ctrl + alt +t 選擇6就可以一鍵生成try=catch

總結(jié)
到此這篇關(guān)于Java中try-catch的使用及注意細(xì)節(jié)的文章就介紹到這了,更多相關(guān)try-catch使用及細(xì)節(jié)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot Redis用注釋實(shí)現(xiàn)接口限流詳解
Redis 除了做緩存,還能干很多很多事情:分布式鎖、限流、處理請(qǐng)求接口冪等性。。。太多太多了~今天想和小伙伴們聊聊用 Redis 處理接口限流,這也是最近的 項(xiàng)目涉及到這個(gè)知識(shí)點(diǎn)了,我就拎出來和大家聊聊這個(gè)話題2022-07-07
SpringBoot3.3中實(shí)現(xiàn)多端口監(jiān)聽的示例代碼
在SpringBoot應(yīng)用中實(shí)現(xiàn)多端口監(jiān)聽,可以讓一個(gè)應(yīng)用處理不同類型的HTTP請(qǐng)求或暴露多個(gè)服務(wù)接口,本文詳細(xì)講解了通過配置application.yml文件和編寫自定義配置類的方法,實(shí)現(xiàn)了對(duì)多個(gè)端口的監(jiān)聽,感興趣的可以了解一下2024-11-11
Java調(diào)用Python的四種方法小結(jié)
在現(xiàn)代開發(fā)中,結(jié)合不同編程語言的優(yōu)勢(shì)往往能達(dá)到事半功倍的效果,本文將詳細(xì)介紹四種在Java中調(diào)用Python的方法,并推薦一種最常用且實(shí)用的方法,希望對(duì)大家有一定的幫助2025-05-05
springboot中的多個(gè)application文件講解
這篇文章主要介紹了springboot中的多個(gè)application文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
淺談resultMap的用法及關(guān)聯(lián)結(jié)果集映射
這篇文章主要介紹了resultMap的用法及關(guān)聯(lián)結(jié)果集映射操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
如何讓@EnableConfigurationProperties的值注入到@Value中
這篇文章主要介紹了如何讓@EnableConfigurationProperties的值注入到@Value中的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-06-06
詳解Springboot整合ActiveMQ(Queue和Topic兩種模式)
這篇文章主要介紹了詳解Springboot整合ActiveMQ(Queue和Topic兩種模式),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04




