国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中的異常處理

2019-11-06 07:07:40
字體:
來源:轉載
供稿:網友

一、概念

java中的異常是指在程序編譯、運行中產生的異常狀況,使得程序無法正常輸出結果。

二、分類

按照異常出現的時間節點,可以將其分為:

(1)檢查性異常:Java.lang.Exception

(2)運行期異常:Java.lang.RuntimeException

(3)錯誤:Java.lang.Error

     以上三個類的 Java.lang.Throwable是的子孫類,其中Java.lang.Exception,Java.lang.Error是Java.lang.Throwable的子類,而Java.lang.RuntimeException則是Java.lang.Exception的子類。具體如下圖

三、深入理解

檢查性異常:程序的邏輯正確,但是由于外部的環境條件無法滿足引發的異常。例如:I/O問題,程序試圖打開一個不存在的文件,或者連接一個不存在的ip,都會報出此類錯誤。Java程序強制要求處理這類錯誤,如果不捕獲這些異常,程序將無法編譯。

舉個例子:

import java.io.FileReader;import java.net.Socket;public class Test3 {	public static void main(String[] args) {		// TODO Auto-generated method stub		//1.打開一個不存在的文件		FileReader fr=new FileReader("d://aa.txt");  //報錯:FileNotFoundException				//2.連接一個不存在的IP		Socket ss = new Socket("192.168.170.55",220);   //報錯: IOException	}}注意:此處的兩個錯誤,不是說就一定有FileNotFound,或者沒有"192.168.170.55",220 這個端口,而是說“可能存在這樣的錯誤”,因此要拋出異常,對其處理。而且事實上我的d:/下面是有aa.txt文件的。

運行期異常:是程序存在bug,例如0被除,數組越界,傳入的參數不滿足規范等。Java程序強制要求處理這類異常。

錯誤(Error):一般很少見,它可能源于程序的bug,但更可能是程序的環境問題,例如內存耗盡等,這類異常在程序中無需處理,又運行環境決定。(當然也可以嘗試修改 程序啟動時的初始內存大小)

四、異常的處理

1、在異常的發生地,直接 try ……  catch……

看栗子1:

import java.io.FileReader;import java.io.IOException;import java.net.Socket;public class Test3 {	public static void main(String[] args) {		// TODO Auto-generated method stub		//2.連接一個不存在的IP		try {			Socket ss = new Socket("192.168.170.55",220);		} catch (IOException e) {			// TODO Auto-generated catch block			e.PRintStackTrace();		}		System.out.println("OK");	}}

在前面的Code中,直接對IOException進行了捕獲。

輸出

java.net.UnknownHostException: 192.1688.170.55	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)	at java.net.PlainSocketImpl.connect(Unknown Source)	at java.net.SocksSocketImpl.connect(Unknown Source)	at java.net.Socket.connect(Unknown Source)	at java.net.Socket.connect(Unknown Source)	at java.net.Socket.<init>(Unknown Source)	at java.net.Socket.<init>(Unknown Source)	at demo.Test3.main(Test3.java:12)OK在查詢后確認沒有找到該主機后報出UnknownHostException() ,而且最后打印出OK。

再看例子2:

public class Test3 {	public static void main(String[] args) {		// TODO Auto-generated method stub		//1.打開一個不存在的文件		try {			FileReader fr=new FileReader("d://abc.txt");			Socket ss = new Socket("192.1688.170.55",220);		} catch (FileNotFoundException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}  catch(IOException e2){			e2.printStackTrace();		}				System.out.println("OK");	}}輸出:

java.io.FileNotFoundException: d:/abc.txt (系統找不到指定的文件。)	at java.io.FileInputStream.open0(Native Method)	at java.io.FileInputStream.open(Unknown Source)	at java.io.FileInputStream.<init>(Unknown Source)	at java.io.FileInputStream.<init>(Unknown Source)	at java.io.FileReader.<init>(Unknown Source)	at demo.Test3.main(Test3.java:13)OK可以看到,程序報出FileNotFoundException 之后就沒有再執行 Socket ss = new Socket("192.1688.170.55",220); ,而是直接跳出了try……catch……語句,進入到了下一句

2、finally語句塊

   一般是把finally 語句塊放在try……catch……之后,在finally 語句塊中寫入必須要執行的代碼,相當于上了一個萬能險,在catch出現異常而catch 又沒有捕獲時,finally將馬上執行。

栗子:

public class Test3 {	public static void main(String[] args) {		// TODO Auto-generated method stub		FileReader fr=null;		//1.打開一個不存在的文件		try {			 fr=new FileReader("d://aa.txt");		} catch (FileNotFoundException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}  finally{			try {				fr.close();			} catch (IOException e) {				// TODO Auto-generated catch block				System.out.println("在關閉文件aa.txt時出現錯誤!");			}		}				System.out.println("OK");	}}

在上面的code中,加入finally語句塊,fr.close 來關閉 aa文件。

而且無論前面 try ……catch……中是否出現異常,finally語句塊都會執行。

注意:以下情況下finally語句塊無法執行

(1)finally語句塊中出現異常

(2)程序所在的線程死亡

(3)前面的代碼中出現System.exit()

(4)關閉CPU

3、throws 語句


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巨鹿县| 蓬溪县| 易门县| 和顺县| 长沙县| 罗定市| 庄浪县| 高青县| 盐边县| 三河市| 唐河县| 周口市| 宜丰县| 白河县| 巫溪县| 九台市| 同仁县| 镇安县| 汕尾市| 东丽区| 津南区| 玉环县| 石柱| 中江县| 塔城市| 商水县| 方城县| 龙口市| 宁化县| 邳州市| 安化县| 沁阳市| 伊川县| 霞浦县| 那坡县| 邳州市| 福安市| 盐源县| 南皮县| 延安市| 关岭|