如何自定义异常,自定义异常的基本步骤,解析异常的使用
- 文章介绍
本篇为两部分
- 复习异常
- 自定义异常的实例
一、复习异常
- 异常分类
- 为什么处理异常
- 处理异常,可以让程序在发生异常时不中断,提高代码的健壮性、容错性
- 什么时候用异常
- 异常出现的两种情况,系统自动抛出异常
- 程序员手动抛出异常
这两种情况的时候要考虑使用异常
- 如何处理异常(两种方法)
- try - catch 直接解决异常
- throws 向上抛异常
- finally 块
- finally 块里面的代码始终都会执行,遇到return也会执行,除非遇到System.exit(0);停止jvm虚拟机,那么代码块不执行
- try - catch -finally 的执行顺序
- 先执行try 有异常执行catch 对应异常的catch块,没有异常,执行finally
- throw :制造异常
二、如何手动抛异常(自定义异常)?— 自定义异常实例
- 案例描述
题目:模拟登录,输入账号密码,登录,模拟验证账号的正确性,账号长度在6-12之间
复习:自定义异常的步骤
- class 自定义异常类,extends 继承Excepion (编译时异常)或者RunTimeException(运行时异常)
- 自定义构造方法,无参、带参都可,传入异常信息
- 上抛throws 异常
案例解析:
package exceptions;
public class UserLengthException extends Exception{
// 自定义异常类
// 无参构造
public UserLengthException() {
super();
}
// 有参构造
public UserLengthException (String msg) {
super(msg);
}
}
// 自定义构造方法
package exceptions;
public class User {
private String account ;
private int psw;
public void rigster( String account,int psw) throws UserLengthException,Exception{
if(account.length()<6||account.length()>12){
throw new UserLengthException("账号格式不正确,请输入6-12位数字!");
}
}
public User() {}
public User(String account, int psw) {
this.account = account;
this.psw = psw;
}
// 重写toString
@Override
public String toString() {
return "User{" +
"account='" + account + '\'' +
", psw=" + psw +
'}';
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public int getPsw() {
return psw;
}
public void setPsw(int psw) {
this.psw = psw;
}
}
// 测试类
package exceptions;
public class Test {
public static void main(String[] args) {
User user = new User();
try{
user.rigster("aa",12345);
}catch (UserLengthException e) {
e.printStackTrace();
System.out.println("账号格式不对 长度应该为6-12");
}catch (Exception e ) {
System.out.println("有异常");
}
System.out.println("处理异常后我照样可以运行");
}
}
- 运行结果
2.5 感悟:
- 异常是一个非常好用的工具,可以在不中断程序的同时发现问题,所以这个方法一定要掌握
- 异常分运行时异常和编译时异常,要知道如何区分,编译时异常在写代码的时候编译器就会报错,运行时异常在程序运行时才会报错
- throws 抛异常,抛得最远只能到main方法, 如果再继续抛,到jvm虚拟机,它不会处理异常,会报错
- 手写异常,一般都要把异常抛出去,不然自己写的异常马上又处理 了,没有意义
- try catch 是直接把异常处理掉了,throws 是向上抛异常,也是一种异常的处理方式throws 抛异常,抛得最远只能到main方法, 如果再继续抛,到jvm虚拟机,它不会处理异常,会报错
- 手写异常,一般都要把异常抛出去,不然自己写的异常马上又处理 了,没有意义
- try catch 是直接把异常处理掉了,throws 是向上抛异常,也是一种异常的处理方式