java学习---异常捕获

异常捕获规程

1.只有要给catch的代码块会被执行

public static void main(String[] args) {
    try {
        process1();
        process2();
        process3();
    } catch (IOException e) {
        System.out.println(e);
    } catch (NumberFormatException e) {
        System.out.println(e);
    }
}

2.catch要按照先放子类,再放父类,因为如果只先放父类,出现子类的异常就被父类的那个catch捕获了,那么子类就永远捕获不到

public static void main(String[] args) {
    try {
        process1();
        process2();
        process3();
    } catch (IOException e) {
        System.out.println("IO error");
    } catch (UnsupportedEncodingException e) { // 永远捕获不到
        System.out.println("Bad encoding");
    }
}
///UnsupportedEncodingException异常是永远捕获不到的,因为它是IOException的子类。当抛出UnsupportedEncodingException异常时,会被catch (IOException e) { ... }捕获并执行。
///这样写的是会报错的,而且,既然父类的异常捕获可以捕获子类的,那么为什么还要加个子类的异常捕获呢?因为日常生活中,可能会出现就是要求你明确的指出是哪些异常,精确打击

3.如果我们希望就是捕获完异常之后又,不管有没有错,都打印一个end该怎么做?

public static void main(String[] args) {
    try {
        process1();
        process2();
        process3();
    } catch (UnsupportedEncodingException e) {
        System.out.println("Bad encoding");
    } catch (IOException e) {
        System.out.println("IO error");
    } finally {
        System.out.println("END");
    }
}
///无论有没有错,都是会打印finally里面的内容,甚至可以没有catch只有try和finally,finally也是可以写可以不写的

多种异常捕获
如果某些异常的处理逻辑相同,但是异常本身不存在继承关系,那么就得编写多条catch子句:
但是有些catch的语句是相同的

public static void main(String[] args) {
    try {
        process1();
        process2();
        process3();
    } catch (IOException e) {
        System.out.println("Bad input");
    } catch (NumberFormatException e) {
        System.out.println("Bad input");
    } catch (Exception e) {
        System.out.println("Unknown error");
    }
}

///如果是这样,那么就可以用|把相同逻辑的异常给合并
public static void main(String[] args) {
    try {
        process1();
        process2();
        process3();
    } catch (IOException | NumberFormatException e) {
        // IOException或NumberFormatException
        System.out.println("Bad input");
    } catch (Exception e) {
        System.out.println("Unknown error");
    }
}

posted @ 2026-05-12 16:52  Time_q  阅读(12)  评论(0)    收藏  举报