有些问题,是和程序无关的,属于我们自己系统的业务流程问题。这种的,就叫做业务异常,业务异常就属于自定义异常。
步骤 1 自定义异常的语法
前面所讲的异常,都是系统自带的,系统自己处理,但是很多时候项目会出现特有问题,而这些问题并未被java所描述并封装成对象,所以对于这些特有的问题可以按照java的对问题封装的思想,将特有的问题进行自定义异常封装。在Java中要想创建自定义异常,需要继承Throwable或者他的子类Exception。
class 自定义异常类 extends 异常类型(Exception){ // 因为父类已经把异常信息的操作都完成了,所在子类只要在构造时,将异常信息传递给父类通过super 语句即可。 // 重写 有参 和 无参 构造方法 }
步骤 2 什么时候需要用到自定义异常?
当某些错误是你自己来决定的,如果发生就不允许程序继续走下去,但是系统自带的异常又都不符合你的要求,这个时候就需要你自己来定义一个异常。
步骤 3 工作中如何使用自定义异常?
我可以很负责任的说,90%的JavaWeb系统,都有一个自定义异常叫做 BusinessException(业务异常)。
就是当业务流程发生错误了,立刻抛出这个异常,让系统能够感知到。
创建一个异常的包:
自定义业务异常类:
package exception; public class BusinessException extends RuntimeException{ public BusinessException() { } public BusinessException(String message) { super(message); } }
这就完事了,emmm,乍一看好像没啥用啊?因为还没讲到web,现在我们就简单写一个Demo。
创建一个User类:
package entity; public class User { private String userName; private String password; public User(String userName, String password) { this.userName = userName; this.password = password; } //省略get,set }
再来一个saveUser方法:
我们规定,如果用户名或者密码为空,是不允许返回的,一般我们会这样写代码:
public TuziHashMap saveUser(User user){ TuziHashMap result = new TuziHashMap(); result.put("code","00000"); result.put("msg",""); if(user.getUserName() == null){ result.put("code","11111"); result.put("msg","用户名不允许为空!"); } if(user.getPassword() == null){ result.put("code","11111"); result.put("msg","密码不允许为空!"); } return result; }
问题是没问题,也确实很多项目就是这么干的,但是,真的不太方便。如果用自定义异常,我们就可以直接这样。
public TuziHashMap saveUser(User user){ TuziHashMap result = new TuziHashMap(); result.put("code","00000"); result.put("msg",""); if(user.getUserName() == null){ throw new BusinessException("用户名不允许为空!"); } if(user.getPassword() == null){ throw new BusinessException("密码不允许为空!"); } return result; }
是不是一下子就清晰了很多呢?