1. 程式人生 > >Java中的異常與錯誤處理

Java中的異常與錯誤處理

ror sys lse AC alt xtend tro ima onu

編譯型異常和運行時異常

編譯時異常是指程序正確 而由外界條件不滿足而產生的異常 java 中要求必須去捕捉住這類異常 不然無法通過編譯

運行時異常是指程序存在著bug 如空指針異常 數組下標越界 都屬於 運行時異常

Error和Exception

Exception:是程序本身可以處理的異常

Error:是程序無法處理的錯誤,這些錯誤標識故障發生於虛擬機自身或者發生在虛擬機試圖執行應用時,一般不需要程序處理,例如:內存空間不足,棧溢出

技術分享圖片

一、throws 在方法的聲明處,顯式的拋出該異常對象的類型

package com.yyx.pratice;

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class TestException { /* * 不推薦 */ public static void main(String[] args) throws FileNotFoundException, IOException { String filepath = "D:" + File.separator + "exception.txt"; FileOutputStream fos
= new FileOutputStream(filepath); String content = "今天是2018/4/8,天氣很好"; byte[] array = content.getBytes(); fos.write(array); fos.close(); } }

二、throw 在方法內拋出異常對象

package com.yyx.pratice;

public class TestException {
    /*
     * 不推薦
     */
    public static void main(String[] args) {
        
try { int i = 3; if (i > 4) { System.out.println("恭喜你,答對了!"); } else { throw new MyException("對不起,算數錯誤"); } } catch (Exception e) { System.out.println(e.getMessage()); } } } class MyException extends Exception { private static final long serialVersionUID = 1L; public MyException(String msg) { super(msg); } }

三、try.....catch....finally......

package com.yyx.pratice;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestException {
    /*
     * 推薦
     */
    public static void main(String[] args) {
        String filepath = "D:" + File.separator + "exception.txt";
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(filepath);
            String content = "今天是2018/4/8,天氣很好";
            byte[] array = content.getBytes();
            fos.write(array);
        } catch (IOException e) {
            e.printStackTrace();//一般此處寫入日誌
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

四、throws和throw的區別

1. 位置不同:throws用在函數上,後面跟的是異常類,可以跟多個;而throw用在函數內,後面跟的是異常對象
2. 功能不同:throws用來聲明異常,讓調用者只知道該功能可能出現的問題,可以給出預先的處理方式;throw拋出具體的問題對象,

執行到throw,功能就已經結束了,跳轉到調用者,並將具體的問題對象拋給調用者。也就是說throw語句獨立存在時,下面不要定義其他語句,因為執行不到
3. throws表示出現異常的一種可能性,並不一定會發生這些異常;throw則是拋出了異常,執行throw則一定拋出了某種異常對象
4. 兩者都是消極處理異常的方式(這裏的消極並不是說這種方式不好),只是拋出或者可能拋出異常,但是不會由函數去處理異常,真正的處理異常由函數的上層調用處理

Java中的異常與錯誤處理