异常处理机制

131 阅读3分钟

「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

异常处理机制

编译时异常处理机制:

编译时异常是编译阶段就出错的,所以必须处理,否则代码根本无法通过。

编译时异常的处理形式有三种:

出现异常直接抛出去给调用者,调用者也继续跑出去。

出现异常自己捕获处理,不麻烦别人。

前两者的结合,出现异常直接抛出去给调用者,调用者捕获处理。

截屏2021-11-05 下午4.44.43.png

异常处理方式1 ---- throws

throws:用在方法上,可以将方法内部出现的异常抛出去给本方法的调用者处理。

这种方式并不好,发生异常的方法自己不处理异常,如果异常最终抛出去给虚拟机将引起程序死亡。

public class ExceptionDemo01 {
    public static void main(String[] args) throws ParseException {
        System.out.println("程序开始");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束");

    }

    public static void parseTime(String date) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(date);
        System.out.println(d);
    }
}
public class ExceptionDemo01 {
    public static void main(String[] args) throws ParseException, FileNotFoundException {
        System.out.println("程序开始");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束");

    }

    public static void parseTime(String date) throws ParseException, FileNotFoundException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(date);
        System.out.println(d);
        InputStream is = new FileInputStream("E:/dd.jpg");
        
    }
}

出现一个异常就要抛出去,异常太多了。

截屏2021-11-05 下午5.10.24.png

public class ExceptionDemo01 {
    public static void main(String[] args) throws Exception {
        System.out.println("程序开始");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束");

    }

    public static void parseTime(String date) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = sdf.parse(date);
        System.out.println(d);
        InputStream is = new FileInputStream("E:/dd.jpg");

    }
}

异常处理方式2 ---- try...catch...

监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。 这种方式还可以,发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。


public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束。。。");

    }

    public static void parseTime(String date) {

        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = null;
            d = sdf.parse(date);
            System.out.println(d);
        } catch (ParseException e) {
            System.out.println("出现了异常");
            e.printStackTrace();
        }
        
        try {
            InputStream is = new FileInputStream("E:/dd.jpg");
        } catch (FileNotFoundException e) {
            System.out.println("出现了异常");
            e.printStackTrace();
        }
    }
}
public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束。。。");

    }

    public static void parseTime(String date) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = null;
            d = sdf.parse(date);
            System.out.println(d);
            InputStream is = new FileInputStream("E:/dd.jpg");
        } catch (ParseException e) {
            System.out.println("出现了异常");
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            System.out.println("出现了异常");
            e.printStackTrace();
        }
    }
}

截屏2021-11-05 下午5.20.30.png

public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束。。。");

    }

    public static void parseTime(String date) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = null;
            d = sdf.parse(date);
            System.out.println(d);
            InputStream is = new FileInputStream("E:/dd.jpg");
        } catch (ParseException | FileNotFoundException e) {
            System.out.println("出现了异常");
            e.printStackTrace();
        } 
    }
}

public class ExceptionDemo2 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        parseTime("2011-11-11 11:11:11");
        System.out.println("程序结束。。。");

    }

    public static void parseTime(String date) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date d = null;
            d = sdf.parse(date);
            System.out.println(d);
            InputStream is = new FileInputStream("E:/dd.jpg");
        } catch (Exception e) {
            System.out.println("出现了异常");
            e.printStackTrace();
        }
    }
}

异常处理方式3 ---- 前两者结合 方法直接将异常通过throws抛出去给调用者。 调用者收到异常后直接捕获处理。

public class ExceptionDemo3 {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        try {
            parseTime("2011-11-11 11:11:11");
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("程序结束。。。");

    }

    public static void parseTime(String date) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = null;
        d = sdf.parse(date);
        System.out.println(d);
        InputStream is = new FileInputStream("E:/dd.jpg");
    }
}

截屏2021-11-05 下午5.32.41.png

截屏2021-11-05 下午5.33.04.png

运行时异常的处理形式:

截屏2021-11-05 下午5.39.16.png

public class Test {
    public static void main(String[] args) {
        System.out.println("程序开始。。。");
        // control + alt + t
        try {
            chu(10, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("程序结束。。。");
    }

    public static void chu(int a, int b){
        System.out.println(a);
        System.out.println(b);
        int c = a/b;
        System.out.println(c);
    }
}