自定义异常概述
当java里面的异常无法满足开发者的需求时,可以自定义异常。
package com.jh.exception;
public class UserService {
//注册的方法 publicvoidregister(String name){
if(name.length()<6){
//需要在这里面一个抛出非法注册名的异常,不过java里面没有这个 }
//如果代码能执行到此处,证明用户名是合法的. System.out.println("注册成功!");
}
}
上面是一个用户注册的代码,如果注册的用户名长度小于6,则需要抛出一个非法注册名的异常,不过java里面没有这个异常,这时,开发者可以自定义这个异常来满足需求
如何自定义异常?
可以看下其他Exception里面的源码进行参考。
如果自定义异常是RuntimeException类型的,那就直接继承RuntimeException即可
否则就继承Exception。
继承之后一般提供两个构造方法,如下自定义名为IllegalNameException的异常
package com.jh.exception;
public class IllegalNameExceptionextendsException{
//编译时异常//public class IllegalNameException extends RuntimeException{
//运行时异常 //定义异常一般提供两个构造方法 publicIllegalNameException(){}
publicIllegalNameException(String msg){
super(msg);
}
}
使用自定义异常
自定义好异常之后就可以使用了,将上面的代码修改一下:
package com.monkey1024.exception;public classUserService{
//注册的方法
publicvoidregister(String name)throwsIllegalNameException{
if(name.length()<6){
//需要在这里面一个抛出非法注册名的异常,不过java里面没有类似的
//手动抛出异常
//注意是throw不是throws
//使用throw在方法体内抛出异常
throw new IllegalNameException();
}
//如果代码能执行到此处,证明用户名是合法的.
System.out.println("注册成功!");
}
}
关于throw,在方法内部出现某种情况,程序不能继续运行,就用throw把异常对象抛出
来写一个测试类
public class RegisterTest{
publicstaticvoidmain(String[] args){
//假如用户提供的用户名如下
String username = "mk";
//注册
CustomerService cs = new CustomerService();
try{
cs.register(username);
}catch(IllegalNameException e){
System.out.println(e.getMessage());
}
}
}