java的异常情况处理

异常分类

  • 我把异常分为两种情况:一种是我要处理的&别人抛出的异常;另外一种是我没法处理时我要抛出的异常.

别人抛出的异常

对于此种异常的解决方案大致分为两种:throws || try…catch…(finally…).如果自己也处理不了所抛出的异常,那么使用throws对上层进行通知;如果在此时能够处理当前的异常,则使用try…catch来实现对异常的处理.

throws Demo

假设读取文件抛出的异常我不会处理,那么我会选择直接抛出.

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

public class Test {
    public void methodA() throws FileNotFoundException {
        FileReader file = new FileReader("a.txt");
    }
}

try…catch…(finally…)Demo

如果我能够处理文件找不到的异常,那么使用try…catch…(finally…)形式

    public void methodB(){
        try {
            FileReader file = new FileReader("a.txt");
        } catch (FileNotFoundException e) {
            System.out.println("这一步是对异常的处理区域");
            e.printStackTrace();
        } finally {
            System.out.println("这一步是可选,无论是否出现异常都会执行的代码");
        }
    }

我抛出异常

在一些时候,抛出异常比返回一个消极的结果更加有用.例如因为条件不足导致无法得到最终结果,我们则可以抛出是哪些条件不足的异常,从而反馈消息,而不是直接返回处理失败的结果(这样开发人员或者用户得到的消息都会很莫名其妙,不知道自己哪一步出现了问题).

  • 自定义异常(可选)
  • 对于能够判断出会出现的异常,可选择直接抛出[如果想提供信息给接口调用者](也可以选择当场处理).

自定义异常

public class CannotBeZeroException extends Exception {
    String msg;

    public CannotBeZeroException(){}
    
    public CannotBeZeroException(String msg){
        super(msg);
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }
}

抛出自定义异常Demo

/**
     * 假设传入的参数不能为零
     * @param value 判断值
     * @return value不为0时的处理结果(这里假设处理都成功,即全部返回true)
     */
    public boolean methodC(int value) throws CannotBeZeroException {
        if (value == 0) throw new CannotBeZeroException("传入的参数不能为零");
        return true;
    }
  • 调用**methodC(0)**则会得到下面的结果:
Exception in thread "main" com.company.CannotBeZeroException: 传入的参数不能为零
	at com.company.Test.methodC(Test.java:29)
	at com.company.Test.main(Test.java:34)

简单总结

  • 有的时候抛出异常比直接返回失败结果更加有用
  • 对异常要么处理,要么不处理(throw || throws)
  • 对于特殊的异常,最好自定义异常类进行异常的描述
发布了22 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38727626/article/details/102541248