Java中的异常与错误处理

编译型异常和运行时异常     

     编译时异常是指程序正确 而由外界条件不满足而产生的异常 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. 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理

猜你喜欢

转载自www.cnblogs.com/xianya/p/9165190.html