0
点赞
收藏
分享

微信扫一扫

java之异常处理

田妞的读书笔记 2022-02-14 阅读 49
java
**
 * 1、异常处理:异常发生时,对异常的处理方式
 * 2、俩种对异常的处理方式
 *      1) try-catch-finally: 程序员在代码中捕获异常,自行处理
 *          无论是否发生异常,finally 代码块总要执行,通常写释放资源的代码
 *      2) throws:将发生的异常抛出,交给调用者处理,最顶级的调用者就是JVM
 * 3、说明
 *      1) t-c-f 和 throws 二选一即可
 *      2) 若没有 t-c-f 异常捕获,默认throws抛出
 *      3) JVM处理异常的方式:打印信息、终端程序
 * 4、t-c-f语法
 *      try{
 *          // 认为会产生异常的代码
 *      }catch (异常){
 *          // 对捕获到的异常的处理
 *      }
 *    说明:
 *      1) 如果异常发生了,那么异常发生后面的代码不会执行,直接走 catch 语句块
 *      2) 如果异常没有发生,则顺序执行 try 的代码块,不会进入到 catch
 *      3) finally: 不管异常是否发生,都执行
 *      4) 可以有多个catch语句块,捕获不同的异常。要求:父类异常在后,子类异常在前,如果发生异常,
 *         只会匹配一个catch
 *      5) try-finally: 这种用法相当于没有捕获异常,当异常发生时,finally执行完后,会直接崩掉
 *         应用场景:执行一段代码,不管是否发生异常,都执行某段程序
 *      6) t-c-f结构中,当 catch 语句块中有return语句时,会执行return的表达式,但不会马上返回,
 *         会先执行finally语句块,优先返回finally语句块中的return,若finally中没有return,会返回catch中的return

1、介绍

public class ExceptionHandle {
    public static void main(String[] args) {
        // 01
        try {
            String str = "jhfk";
            int a = Integer.parseInt(str);
        }catch (NumberFormatException e){
            System.out.println("异常信息= "+e.getMessage());
        }finally {
            System.out.println("finally 代码块被执行...");
        }

        // 02
        try {
            Person jack = new Person("jack");
            jack=null;
            System.out.println(jack.getName()); // 会有一个异常
            int n1 = 10;
            int n2 = 0;
            System.out.println(n1/n2);  // 会有一个异常
        }catch (NullPointerException e){
            System.out.println("空指针异常");
        }catch (ArithmeticException e){
            System.out.println("算术异常");
        }catch (Exception e){
            System.out.println(e.getMessage());
        }
        System.out.println("程序继续...");


    }
}

class Person{

    private String name;

    public String getName() {
        return name;
    }

    public Person(String name) {
        this.name = name;
    }
}

2、t-c-f 练习

package level3.myEXception;

public class ExceptionExercise {
    public static void main(String[] args) {
        Test test = new Test();
        System.out.println(test.method());
    }
}

class Test{
    public int method(){
        int i=1;
        try {
            i++;        // i=2
            String[] name = new String[3];
            if(name[1].equals("tom")){  // 空指针异常-直接到catch语句块
                System.out.println(name[1]);
            }else{
                name[3]="jack";
            }
            return 1;
        }catch (ArrayIndexOutOfBoundsException e){
            return 2;
        }catch (NullPointerException e){
            return ++i;     // 执行 ++i,并赋值给临时变量tmp=3,不会立即返回,会先执行finally语句
                            // finally语句块中没有return,返回这里的tmp
        }finally {
            ++i;            // 执行++i,
            System.out.println("i= " + i);  // 输出 i=4
//            return i;     // 若这里有return,直接在这里返回,若没有,返回上级return的地方返回
        }
    }
}

举报

相关推荐

0 条评论