JAVA异常

参考网址:https://www.bilibili.com/video/BV1JX4y1g78e?p=12

try-catch和throw,throws的区别和联系

我写了一个小案例:

package com.genericity.demo9;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;

public class NewException {

    public int show1() throws FileNotFoundException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("d://cc.txt"));
        return 0;
    }

    public int show2() {
        try {
            BufferedReader bufferedReader = new BufferedReader(new FileReader("d://cc.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return 0;
    }

    public int show3(boolean flag){
        if(flag){
            System.out.println("程序运行正确");
        }else{
            throw new RuntimeException("程序运行错误");
        }
        return 0;
    }
}

package com.genericity.demo9;

import java.io.FileNotFoundException;

public class TestException1 {
    public static void main(String[] args) {

    }

    public String test() {
        NewException newException = new NewException();
        try {
            int show = newException.show1();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        return "ok";
    }
}

package com.genericity.demo9;

import java.io.FileNotFoundException;

public class TestException2 {
    public static void main(String[] args) {

    }

    public String test() {
        NewException newException = new NewException();
//        try {
//            int show = newException.show2();
//        } catch (FileNotFoundException e) {//由于在NewException类中,show2方法已经将异常try catch捕获处理了,这里如果还接着处理,就会抛出异常,所以我们会看到这里是报错的。
//            e.printStackTrace();
//        }
        int show = newException.show2();//正确的做法是:直接调用show2()方法就可以了

        return "ok";
    }
}

package com.genericity.demo9;

public class TestException3 {
    public static void main(String[] args) {
        TestException3 testException3 = new TestException3();
//        testException3.test(true);
        testException3.test(false);
    }

    public String test(boolean flag) {
        NewException newException = new NewException();

        System.out.println(newException.show3(flag));//这样写也是正确的,控制台会报错,Exception in thread "main" java.lang.RuntimeException: 程序运行错误,当然你也可以使用try catch 进行异常的捕捉
        //下面是使用try catch 进行异常的捕捉,运行结果:程序运行还算正常
//        try {
//            newException.show3(flag);
//        } catch (RuntimeException e) {
//            System.out.println("程序运行还算正常");
//        }
        return "ok";
    }
}


首先,我们先讲解一下这三者之间的区别:

try catch 就是我们在编译的时候可能出现的异常,我们使用try catch 捕获了这些个可能出现的异常,在方法调用的时候,我们直接调用就可以了,就不用再进行异常的处理了,如果再次进行异常的处理,代码是会爆红的。

throws 将编译时候出现的异常向上抛出,也就是将可能出现的异常写到方法后面,多个异常之间用逗号分隔;也就是说将异常扔给了调用方,调用放如果不处理异常就接着向上throws抛出,如果处理,就是用try catch捕获。

throw 是我们在写代码的时候手动抛出的异常,在调用的时候,可以处理异常,也可以不用处理异常,不处理异常的时候,也是不会报错的。

运行时出现的异常是不用处理的,编译的时候出现的异常是一定要处理的。

用户自定义异常类:

package com.genericity.demo9;

/**
 * 自定义异常类
 */
public class MyException extends RuntimeException{

    static final long serialVersionUID = -7034897123745766939L;

    public MyException(){

    }

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

package com.genericity.demo9;

/**
 * 练习异常
 */
public class TestException4 {
    public static void main(String[] args) {

        if(false){
            System.out.println("程序运行正常");
        }else{
            throw new MyException("程序运行异常");
        }
    }

}
//Exception in thread "main" com.genericity.demo9.MyException: 程序运行异常
	at com.genericity.demo9.TestException4.main(TestException4.java:12)

posted on 2021-12-10 14:17  ~码铃薯~  阅读(27)  评论(0编辑  收藏  举报

导航