最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java基礎詳細筆記之異常處理

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

異常概述

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

視頻筆記: 

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

  • java.lang.Error:一般不編寫針對性的代碼進行處理
  • Java.lang.Exception:可以進行異常處理
  • 編譯時異常(checked)運行時異常(unchecked)

1.Error:java虛擬機無法解決的嚴重問題。如:JVM系統(tǒng)內部錯誤

2.Exception:其他因編程錯誤或偶然的外在因素導致的一般性問題,可以使用針對性的代碼     進行處理。例如:空指針訪問試圖讀取不存在的文件,網絡連接中斷,數組角標越界

下面看最常見的將0做除數的時候 

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

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

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

棧溢出(main里面還調main(args)) 

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

 堆溢出(OutOfMemoryError)

書本內容: 

Java語言是一門面向對象的編程語言,因此異常在Java語言中也是作為類的實例的形式出現的,當某一方法發(fā)生錯誤時,這個方法會創(chuàng)建一個對象,并且把它傳遞給正在運行的系統(tǒng)。這個對象就是異常對象。通過異常處理機制,可以將非正常情況下的處理代碼與程序的主邏輯分離,即在編寫代碼主流程的同時在其他地方處理異常。 

常見異常的舉例  

空指針異常NullPointerException

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

數組角標越界異常ArrayIndexOutOfBoundsException 

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

 異常的拋出與捕捉

為了保證程序有效地執(zhí)行,需要對拋出的異常進行相應的處理。在Java中,如果某個方法拋出異常,既可以在當前方法中進行捕捉,而后處理該異常,也可以將異常向上拋出,交由方法調用者來處理。

拋出異常

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

例如,將一個字符串轉換為整型,可以通過Integer類的parseInt()方法來實現。但如果該字符串不是數字形式,parseInt()方法就會拋出異常,程序將在出現異常的位置終止,不在執(zhí)行下面語句

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以及輸出,只是后面語句自身問題,導致代碼終止

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

捕捉異常

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

try{
//代碼塊
}
catch(exception1 e)//(異常類型,變量名)
{
//對exception1的處理
}
catch(exception2 e)//(異常類型,變量名)
{
//對exception2的處理
}
finally{
//代碼塊(一定會執(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("出現異常啦,不要慌");
		}
		System.out.println("你看,都說問題不大啦");
}
}

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

視頻筆記: 

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

finally語句塊

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

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

 

 這里對比一下發(fā)現第二個圖沒寫finally但沒影響結果的體現

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

在方法中拋出異常

使用throws關鍵字拋出異常

throws關鍵字通常被應用在聲明方法時,用來指定方法可能拋出的異常。多個異常可使用逗號分隔。

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關鍵字來聲明要拋出的異常,編譯仍能順利通過,但在運行時會被系統(tǒng)拋出。 ""

"throws+異常類型"寫在方法的聲明處。指明此方法執(zhí)行時,可能會拋出異常類型。一旦當方法體執(zhí)行時,出現異常,仍會在異常代碼處生成一個異常類的對象,此對象滿足throws后異常類型時,就會被拋出

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

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

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("除數不能是負數");
		}
		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("除數不能為0");
}catch(Exception e)
{
	System.out.println("產生了其他異常");
}
}
}

異常的使用原則

 Java異常強制用戶去考慮程序的強健性和安全性。異常處理不應來控制程序的正常流程,其主要作用是捕獲程序在運行時發(fā)生的異常并進行相應的處理。編寫代碼處理某個方法可能出現的異常時,可遵循一下原則:

  • 在當前方法聲明中使用try-catch語句捕獲異常
  • 一個方法被覆蓋時,覆蓋它的方法必須拋出相同的異?;虍惓5淖宇?/li>
  • 如果父類拋出多個異常,則覆蓋方法必須拋處那些異常的一個子集,不能拋出新異常

總結

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

相關文章

最新評論

得荣县| 遵义市| 察雅县| 互助| 敦化市| 乌什县| 鄂伦春自治旗| 兴义市| 土默特右旗| 嘉鱼县| 昌宁县| 施甸县| 福贡县| 金堂县| 新邵县| 新巴尔虎左旗| 嘉鱼县| 克山县| 时尚| 黑水县| 元谋县| 红原县| 仪征市| 清徐县| 双峰县| 孟津县| 吴桥县| 武隆县| 辽阳县| 锦屏县| 湘阴县| 卢龙县| 蕉岭县| 西城区| 泌阳县| 明星| 光山县| 姚安县| 昌图县| 菏泽市| 西充县|