欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java基礎(chǔ)詳細(xì)筆記之異常處理

 更新時(shí)間:2022年03月02日 10:38:17   作者:小吳有想法  
異常是程序中的一些錯(cuò)誤,但并不是所有的錯(cuò)誤都是異常,并且錯(cuò)誤有時(shí)候是可以避免的,下面這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)詳細(xì)筆記之異常處理的相關(guān)資料,需要的朋友可以參考下

異常概述

在Java中,這種在程序運(yùn)行時(shí)可能出現(xiàn)的一些錯(cuò)誤稱為異常。異常是一個(gè)在程序執(zhí)行期間發(fā)生的事件,它中斷了正在執(zhí)行的成宿的正常指令流。 

視頻筆記: 

 Java程序執(zhí)行時(shí)遇到的異常:

  • java.lang.Error:一般不編寫(xiě)針對(duì)性的代碼進(jìn)行處理
  • Java.lang.Exception:可以進(jìn)行異常處理
  • 編譯時(shí)異常(checked)運(yùn)行時(shí)異常(unchecked)

1.Error:java虛擬機(jī)無(wú)法解決的嚴(yán)重問(wèn)題。如:JVM系統(tǒng)內(nèi)部錯(cuò)誤

2.Exception:其他因編程錯(cuò)誤或偶然的外在因素導(dǎo)致的一般性問(wèn)題,可以使用針對(duì)性的代碼     進(jìn)行處理。例如:空指針訪問(wèn),試圖讀取不存在的文件網(wǎng)絡(luò)連接中斷,數(shù)組角標(biāo)越界

下面看最常見(jiàn)的將0做除數(shù)的時(shí)候 

public class test {
	public static void main(String[] args)
	{
	int a=3/0;
	System.out.println(a);
}
}

 程序運(yùn)行的結(jié)果報(bào)告發(fā)生了算數(shù)異常ArithmeticException,系統(tǒng)不在執(zhí)行下去,提前結(jié)束。這種情況就是所說(shuō)的異常。

public class test {
	public static void main(String[] args)
	{
	main(args);
}
}

棧溢出(main里面還調(diào)main(args)) 

public class test {
	public static void main(String[] args)
	{
	Integer [] a=new Integer[1024*1024*1024];
}
}

 堆溢出(OutOfMemoryError)

書(shū)本內(nèi)容: 

Java語(yǔ)言是一門面向?qū)ο蟮木幊陶Z(yǔ)言,因此異常在Java語(yǔ)言中也是作為類的實(shí)例的形式出現(xiàn)的,當(dāng)某一方法發(fā)生錯(cuò)誤時(shí),這個(gè)方法會(huì)創(chuàng)建一個(gè)對(duì)象,并且把它傳遞給正在運(yùn)行的系統(tǒng)。這個(gè)對(duì)象就是異常對(duì)象。通過(guò)異常處理機(jī)制,可以將非正常情況下的處理代碼與程序的主邏輯分離,即在編寫(xiě)代碼主流程的同時(shí)在其他地方處理異常。 

常見(jiàn)異常的舉例  

空指針異常NullPointerException

public class test {
	public static void main(String[] args)
	{
	int a[]=null;
	System.out.println(a[5]);
}
}

數(shù)組角標(biāo)越界異常ArrayIndexOutOfBoundsException 

public class test {
	public static void main(String[] args)
	{
	int a[]=new int[5];
	System.out.println(a[5]);
}
}

 異常的拋出與捕捉

為了保證程序有效地執(zhí)行,需要對(duì)拋出的異常進(jìn)行相應(yīng)的處理。在Java中,如果某個(gè)方法拋出異常,既可以在當(dāng)前方法中進(jìn)行捕捉,而后處理該異常,也可以將異常向上拋出,交由方法調(diào)用者來(lái)處理。

拋出異常

異常拋出后,如果不做任何處理,程序就會(huì)被終止。

例如,將一個(gè)字符串轉(zhuǎn)換為整型,可以通過(guò)Integer類的parseInt()方法來(lái)實(shí)現(xiàn)。但如果該字符串不是數(shù)字形式,parseInt()方法就會(huì)拋出異常,程序?qū)⒃诔霈F(xiàn)異常的位置終止,不在執(zhí)行下面語(yǔ)句

public class test {
	public static void main(String[] args)
	{
String str="abc";
System.out.println(str);
int a=Integer.parseInt("20L");
System.out.println(a);
}
}

 NumberFormatException異常,abc以及輸出,只是后面語(yǔ)句自身問(wèn)題,導(dǎo)致代碼終止

拋出異常,其后的代碼不執(zhí)行

捕捉異常

Java語(yǔ)言的異常捕獲結(jié)構(gòu)由try,catch,finally3部分組成。其中,try語(yǔ)句塊存放的是可能發(fā)生異常的Java語(yǔ)句;catch語(yǔ)句塊在try語(yǔ)句塊之后,用來(lái)激發(fā)被捕獲的異常;final語(yǔ)句塊是異常結(jié)構(gòu)的最后執(zhí)行部分,無(wú)論try語(yǔ)句塊中的代碼如何退出,都將執(zhí)行finally語(yǔ)句塊

try{
//代碼塊
}
catch(exception1 e)//(異常類型,變量名)
{
//對(duì)exception1的處理
}
catch(exception2 e)//(異常類型,變量名)
{
//對(duì)exception2的處理
}
finally{
//代碼塊(一定會(huì)執(zhí)行的代碼)
}

模板如上

public class test {
	public static void main(String[] args)
	{
String str="abc";
System.out.println(str);
try {
int a=Integer.parseInt(str);
System.out.println("猜猜看");
		}
		catch(Exception e)
		{
			System.out.println("出現(xiàn)異常啦,不要慌");
		}
		System.out.println("你看,都說(shuō)問(wèn)題不大啦");
}
}

用e.printStackTrace();語(yǔ)句輸出異常性質(zhì)后得到

視頻筆記: 

  • finally是可選的
  • 使用try將可能出現(xiàn)的異常代碼包裝起來(lái),在執(zhí)行過(guò)程中,一旦出現(xiàn)異常,就會(huì)生成一個(gè)對(duì)應(yīng)異常類的對(duì)象,根據(jù)此對(duì)象的類型,去catch中進(jìn)行匹配——比如我們上述代碼中的Exception e寫(xiě)為NumberFormatException e,與其對(duì)應(yīng)
  • 一旦try中的異常對(duì)象匹配到某一個(gè)catch時(shí),就進(jìn)入catch中進(jìn)行異常處理。一旦處理完成,就跳出當(dāng)前try——catch結(jié)構(gòu)(若此時(shí)無(wú)finally)。繼續(xù)執(zhí)行其后的代碼
  • catch中的異常類型如果滿足子父類關(guān)系,則要求子類一定要聲明在父類的上面。
  • 在try結(jié)構(gòu)中聲明的變量,在出了try結(jié)構(gòu)以后,就不能再被調(diào)用
  • 使用該結(jié)構(gòu)處理異常時(shí),編譯時(shí)沒(méi)有報(bào)錯(cuò),但是運(yùn)行時(shí)仍有可能報(bào)錯(cuò),相當(dāng)于將異常延長(zhǎng)到運(yùn)行時(shí)出現(xiàn);開(kāi)發(fā)中,由于運(yùn)行時(shí)異常比較常見(jiàn),所以我們通常不針對(duì)運(yùn)行時(shí)異常編寫(xiě)try-catch-finally

finally語(yǔ)句塊

一下四種特殊情況下,finally塊不會(huì)被執(zhí)行:

  • 在finally語(yǔ)句塊中發(fā)生了異常
  • 在前面的代碼中使用了System.exit()退出程序
  • 程序所在的線程死亡
  • 關(guān)閉CPU

 

 這里對(duì)比一下發(fā)現(xiàn)第二個(gè)圖沒(méi)寫(xiě)finally但沒(méi)影響結(jié)果的體現(xiàn)

finally是可選的
finally中聲明的是一定會(huì)被執(zhí)行的代碼,即使catch中又出現(xiàn)異常了,try中有return語(yǔ)句,catch中有return語(yǔ)句等情況

在方法中拋出異常

使用throws關(guān)鍵字拋出異常

throws關(guān)鍵字通常被應(yīng)用在聲明方法時(shí),用來(lái)指定方法可能拋出的異常。多個(gè)異??墒褂枚禾?hào)分隔。

public class test {
	static void p()throws NegativeArraySizeException{
		//定義方法并拋出NegativeArraySizeException異常
		int[] a=new int[-4];
	}
 
	public static void main(String[] args)
	{
 
		try {
			p();
		 }
	catch(NegativeArraySizeException e) {
		System.out.println("p()方法拋出的異常");
	  }
	
}
	}

筆記:如果是Error類,RuntimeException類或他們的子類,可以不使用throws關(guān)鍵字來(lái)聲明要拋出的異常,編譯仍能順利通過(guò),但在運(yùn)行時(shí)會(huì)被系統(tǒng)拋出。 ""

"throws+異常類型"寫(xiě)在方法的聲明處。指明此方法執(zhí)行時(shí),可能會(huì)拋出異常類型。一旦當(dāng)方法體執(zhí)行時(shí),出現(xiàn)異常,仍會(huì)在異常代碼處生成一個(gè)異常類的對(duì)象,此對(duì)象滿足throws后異常類型時(shí),就會(huì)被拋出

使用throw關(guān)鍵字拋出異常(自定義異常)

throw關(guān)鍵字通常用于方法體中,并且拋出一個(gè)異常對(duì)象。程序在執(zhí)行到throw語(yǔ)句時(shí)立即終止,它后面的語(yǔ)句都不執(zhí)行。通過(guò)throw拋出異常后,如果想在上一級(jí)代碼中捕獲并處理異常,則需要在拋出異常的方法中使用throws關(guān)鍵字在方法的聲明中指明要拋出的異常;如果要捕獲throw拋出的異常,則必須使用try-catch語(yǔ)句塊

public class test extends Exception {
	String name;
	public test(String errorname)
	{
		name=errorname;
	}
	public String getName()
	{
		return name;
	}		
}
public class captor{
	static int q(int x,int y)throws test{
		if(y<0)
		{
			throw new test("除數(shù)不能是負(fù)數(shù)");
		}
		return x/y;
	}
	public static void main(String[] args)
	{
try {
	int result=q(3,-1);
}catch(test e) {
	System.out.println(e.getName());
}catch(ArithmeticException e)
{
	System.out.println("除數(shù)不能為0");
}catch(Exception e)
{
	System.out.println("產(chǎn)生了其他異常");
}
}
}

異常的使用原則

 Java異常強(qiáng)制用戶去考慮程序的強(qiáng)健性和安全性。異常處理不應(yīng)來(lái)控制程序的正常流程,其主要作用是捕獲程序在運(yùn)行時(shí)發(fā)生的異常并進(jìn)行相應(yīng)的處理。編寫(xiě)代碼處理某個(gè)方法可能出現(xiàn)的異常時(shí),可遵循一下原則:

  • 在當(dāng)前方法聲明中使用try-catch語(yǔ)句捕獲異常
  • 一個(gè)方法被覆蓋時(shí),覆蓋它的方法必須拋出相同的異常或異常的子類
  • 如果父類拋出多個(gè)異常,則覆蓋方法必須拋處那些異常的一個(gè)子集,不能拋出新異常

總結(jié)

到此這篇關(guān)于java基礎(chǔ)詳細(xì)筆記之異常處理的文章就介紹到這了,更多相關(guān)java異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring深入了解常用配置應(yīng)用

    Spring深入了解常用配置應(yīng)用

    這篇文章主要給大家介紹了關(guān)于Spring的常用配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • MAC下基于maven使用IDEA走讀TestNG源碼解析

    MAC下基于maven使用IDEA走讀TestNG源碼解析

    這篇文章主要介紹了MAC下基于maven使用IDEA走讀TestNG源碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-06-06
  • shiro多驗(yàn)證登錄代碼實(shí)例及問(wèn)題解決

    shiro多驗(yàn)證登錄代碼實(shí)例及問(wèn)題解決

    這篇文章主要介紹了shiro多驗(yàn)證登錄代碼實(shí)例及問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot基于過(guò)濾器和內(nèi)存實(shí)現(xiàn)重復(fù)請(qǐng)求攔截功能

    SpringBoot基于過(guò)濾器和內(nèi)存實(shí)現(xiàn)重復(fù)請(qǐng)求攔截功能

    這篇文章主要介紹了SpringBoot基于過(guò)濾器和內(nèi)存實(shí)現(xiàn)重復(fù)請(qǐng)求攔截,這里我們使用過(guò)濾器的方式對(duì)進(jìn)入服務(wù)器的請(qǐng)求進(jìn)行過(guò)濾操作,實(shí)現(xiàn)對(duì)相同客戶端請(qǐng)求同一個(gè)接口的過(guò)濾,需要的朋友可以參考下
    2023-01-01
  • 詳解java NIO之Channel(通道)

    詳解java NIO之Channel(通道)

    這篇文章主要介紹了詳解java NIO之Channel(通道)的相關(guān)資料,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Java實(shí)現(xiàn)JDBC向數(shù)據(jù)庫(kù)批量插入

    Java實(shí)現(xiàn)JDBC向數(shù)據(jù)庫(kù)批量插入

    在Java項(xiàng)目中可能會(huì)出現(xiàn)大量向數(shù)據(jù)庫(kù)中插入的情況,本文主要介紹了Java實(shí)現(xiàn)JDBC向數(shù)據(jù)庫(kù)批量插入,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java中JSONObject與JSONArray的使用區(qū)別詳解

    Java中JSONObject與JSONArray的使用區(qū)別詳解

    這篇文章主要介紹了Java中JSONObject與JSONArray的使用區(qū)別詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼

    RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼

    本篇文章主要介紹了RxJava2.x+ReTrofit2.x多線程下載文件的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • java在網(wǎng)頁(yè)上面抓取郵件地址的方法

    java在網(wǎng)頁(yè)上面抓取郵件地址的方法

    這篇文章主要介紹了java在網(wǎng)頁(yè)上面抓取郵件地址的方法,是比較典型的Java正則匹配應(yīng)用實(shí)例,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11

最新評(píng)論