Java标准库定义的异常有:
当我们在代码中需要抛出异常时,尽量使用JDK已定义的异常类型。例如,参数检查不合法,应该抛出IllegalArgumentException:
static void process1(int age) {
if (age <= 0) {
throw new IllegalArgumentException();
}
}
在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。
一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。
BaseException需要从一个适合的Exception派生,通常建议从RuntimeException派生:
public class BaseException extends RuntimeException {
}
其他业务类型的异常就可以从BaseException派生:
public class UserNotFoundException extends BaseException {
}
public class LoginFailedException extends BaseException {
}
...
自定义的BaseException应该提供多个构造方法:
public class BaseException extends RuntimeException {
public BaseException() {
super();
}
public BaseException(String message, Throwable cause) {
super(message, cause);
}
public BaseException(String message) {
super(message);
}
public BaseException(Throwable cause) {
super(cause);
}
}
上述构造方法实际上都是原样照抄RuntimeException。这样,抛出异常的时候,就可以选择合适的构造方法。通过IDE可以根据父类快速生成子类的构造方法。
练习
试试使用自定义异常
Demo03.java
public class Demo03 {
public static void main(String[] args) {
String token = login("admin", "pass");
System.out.println("Token: " + token);
}
static String login(String username, String password) {
if (username.equals("admin")) {
if (password.equals("password")) {
return "xxxxxx";
} else {
// 抛出LoginFailedException:
throw new LoginFailedException("Bad username or password.");
}
} else {
// 抛出UserNotFoundException:
throw new UserNotFoundException("User not found.");
}
}
}
BaseException.java
public class BaseException extends RuntimeException {
public BaseException() {
super();
}
public BaseException(String message, Throwable cause) {
super(message, cause);
}
public BaseException(String message) {
super(message);
}
public BaseException(Throwable cause) {
super(cause);
}
}
小结
抛出异常时,尽量复用JDK已定义的异常类型;
自定义异常体系时,推荐从RuntimeException派生“根异常”,再派生出业务异常;
自定义异常时,应该提供多种构造方法。
练习题答案
Demo03.java
public class Demo03 extends BaseException{
public static void main(String[] args) {
try {
String token = login("admin", "pass");
System.out.println("Token: " + token);
}catch (LoginFailedException e){
System.out.println("错误信息:"+e);
System.out.println("登录异常");
}catch (UserNotFoundException e){
System.out.println("错误信息:"+e);
System.out.println("用户名错误");
}
finally {
System.out.println("Finally: 测试完成");
}
}
static String login(String username, String password) {
if (username.equals("admin")) {
if (password.equals("password")) {
return "xxxxxx";
} else {
// 抛出LoginFailedException:
throw new LoginFailedException("Bad username or password.");
}
} else {
// 抛出UserNotFoundException:
throw new UserNotFoundException("User not found.");
}
}
}
BaseException.java保持不变
新建两个类:
LoginFailedException.java
public class LoginFailedException extends BaseException {
public LoginFailedException(String s) {
super();
}
}
UserNotFoundException.java
public class UserNotFoundException extends BaseException {
public UserNotFoundException(String s) {
super();
}
}
谢谢观看
来源:CSDN
作者:一条编程鱼
链接:https://blog.csdn.net/weixin_43581288/article/details/104170105