【Java】【異常】

來源:互聯網
上載者:User

標籤:分類   編譯   使用者   地方   處理異常   過程   runtime   檢查   出現   

java中2種方法處理異常:
1、在發?異常的地方直接處理;
2、將異常拋給調用者,讓調?者處理。
異常分類
1、檢查性異常: java.lang.Exception
2、運?期異常: java.lang.RuntimeException
3、錯誤: java.lang.Error
頂層是java.lang.Throwable類,檢查性異常、運?期異常、錯誤都是這個類的?孫類,
ja va . la n g. Exce pt i on和ja va . la n g. Error繼承?ja va . la n g. Th rowa ble,?
java.lang.RuntimeException繼承?java.lang.Exception
1、檢查性異常:
程式正確,但因為外在的環境條件不滿?引發。例如:使用者錯誤及I/O問題--程式試圖打
開?個並不存在的遠程Socket端?,或者是開啟不存在的檔案時。這不是程式本身的邏輯
錯誤,?很可能是遠程機器名字錯誤(?戶拼字錯誤),對商?軟體系統,程式開發人員必須
考慮並處理這個問題。 java編譯器強制要求處理這類異常,如果不捕獲這類異常,程式將
不能被編譯。
2、運行期異常:
這意味著程式存在bug,如數組越界、 0被除、入參不滿足規範...這類異常需要更改程式
來避免, java編譯器強制要求處理這類異常。
3、錯誤:
一般很少見,也很難通過程式解決,它可能源於程式的bug,但?般更可能源於環境問
題,如記憶體耗盡。錯誤在程式中?需處理,由運行環境處理。

 

 



/*
栗子 異常 try...catch

*/

import java.util.Random;

public class test_fanxing {
public static void main(String[] args){
int x = new Random().nextInt(5);
int y = new Random().nextInt(10);
int[] z = new int[5];
try{
System.out.println("x=" + x + "y=" + y + "y/x=" + (y/x));
System.out.println("y=" + y + "z[y]=" + z[y]);
}
catch(ArithmeticException exc1){
//分步捕獲算術運算異常資訊
System.out.println("算術運算異常:" + exc1.getMessage());
}
catch(ArrayIndexOutOfBoundsException exc2){
System.out.println("數組越界異常:" + exc2.getMessage());
}

}
}




2、 finally
如果把finally塊置try...catch...語句後, finally塊?般都會得到執?,它相當於?個
萬能的保險,即使前?的try塊發?異常,??沒有對應異常的catch塊, finally塊將?上
執?。
以下情形, finally塊將不會被執?:
1、 finally塊中發?了異常;
2、程式所在的線程死亡;
3、在前?的代碼中?了System.exit();
4、關閉CPU





/*
栗子 finally

*/


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.Socket;


public class test_fanxing {
public static void main(String[] args) {
FileReader fr = null;
//檢查異常
//1. 開啟不存在的檔案
try{
//fr = new FileReader("D:\\aa.txt");
//System.exit(-1);//使用System.exit()後finally語句塊不再執行
Socket s = new Socket("192.168.956.1",21);
}
/* catch (FileNotFoundException e){
System.out.println("檔案不存在:" + e.getMessage());//getMessage()不如printStackTrace()
//e.printStackTrace();//輸出bug 資訊
}*/

catch(IOException e2){
e2.printStackTrace();
}
finally {
//try.catch...語句塊中不管出沒出現異常,一般都會執行finally語句塊
//一般說,把需要關閉的資源。如【檔案】、【連結】、【記憶體】....
System.out.println("測試進入finally語句塊");
if(fr!=null){
try{
fr.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}

System.out.println("OK1");


}
}
/*
【結果】
檔案不存在:D:\aa.txt (系統找不到指定的檔案。)
測試進入finally語句塊
OK1
2.如果把第一個catch注釋掉
【結果】
java.net.UnknownHostException: 192.168.956.1
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at test_fanxing.main(test_fanxing.java:23)
測試進入finally語句塊
OK1

*/









































































































 

【Java】【異常】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.