Skip to content

Latest commit

 

History

History
143 lines (115 loc) · 3.68 KB

8. Exception.md

File metadata and controls

143 lines (115 loc) · 3.68 KB

8. Exception

面向对象的方式处理异常:

==抛出异常==:执行一个方法时,如果发生异常,这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE

==捕获异常==:JRE得到该异常之后,寻找相应的代码来处理该异常,JRE在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止

package com.alexanderli95.testException;

/**
 * 测试异常
 */
public class TestException {
    public static void main(String[] args){
        try {
            Thread.sleep(1000);             //checked exception 需要手动捕获
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        int i=1/0;    //unchecked exception 编译器自动捕获
    }
}
package com.alexanderli95.testException;


import java.io.*;
import java.io.IOException;

/**
 * 通常在finally里面放关闭已打开资源的代码
 */
public class TestException02 {
    public static void main(String[] args) {
        FileReader fr=null;
        try {
            fr=new FileReader("e:/a.txt");   //此处由于要和外部环境交互,所以需要加异常捕获
            char c=(char)fr.read();
            System.out.println(c);
        } catch (FileNotFoundException e) {    //FileNotFoundException是IOException的子类,catch语句子类在前父类在后
            e.printStackTrace();
        } catch (IOException e){    //一个try可以跟多个catch
            e.printStackTrace();
        }finally {                  //最好不要在finally中加return语句,不然会覆盖try代码块中return的内容
            try {
                if(fr!=null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

throws

package com.alexanderli95.testException;

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


/**
 * 测试throws
 * throws: 声明异常
 * 方法重写时,子类声明异常时的范围不可超出父类的范围,子类也不能抛出父类的父类的异常
 */
public class TestThrowException {
    public static void main(String[] args) {
        String str=new String();
        try {
            str=new TestThrowException().openFile();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            System.out.println(str);
        }

        //手动抛出异常,不常用
        File f=new File("e:/b.txt");
        if(!f.exists()){
            try {
                throw new FileNotFoundException("File cannot be founded");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

    String openFile() throws FileNotFoundException, IOException {   //抛出异常,在函数中不作处理,调用时处理
        FileReader fr=new FileReader("e:/a.txt");
        char c=(char)fr.read();
        return ""+c;
    }
}

自定义异常

package com.alexanderli95.testException;


/**
 * 自定义异常
 */
public class MyException extends Exception{
    public MyException(){

    }

    public MyException(String message){
        super(message);
    }
}

class Test{
    static void t() throws MyException{
        //
    }

    public static void main(String[] args) {
        try {
            t();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }

}