如何自定义异常,自定义异常的基本步骤,解析异常的使用

  • 文章介绍

本篇为两部分

  1. 复习异常
  2. 自定义异常的实例

一、复习异常

  • 异常分类

android 自定义异常抛出异常 自定义异常例子_java

  • 为什么处理异常
  1. 处理异常,可以让程序在发生异常时不中断,提高代码的健壮性、容错性
  • 什么时候用异常
  1. 异常出现的两种情况,系统自动抛出异常
  2. 程序员手动抛出异常

这两种情况的时候要考虑使用异常

  • 如何处理异常(两种方法)
  1. try - catch 直接解决异常
  2. throws 向上抛异常
  • finally 块
  1. finally 块里面的代码始终都会执行,遇到return也会执行,除非遇到System.exit(0);停止jvm虚拟机,那么代码块不执行
  • try - catch -finally 的执行顺序
  1. 先执行try 有异常执行catch 对应异常的catch块,没有异常,执行finally
  • throw :制造异常

二、如何手动抛异常(自定义异常)?— 自定义异常实例

  • 案例描述

题目:模拟登录,输入账号密码,登录,模拟验证账号的正确性,账号长度在6-12之间

复习:自定义异常的步骤

  1. class 自定义异常类,extends 继承Excepion (编译时异常)或者RunTimeException(运行时异常)
  2. 自定义构造方法,无参、带参都可,传入异常信息
  3. 上抛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 感悟:

  1. 异常是一个非常好用的工具,可以在不中断程序的同时发现问题,所以这个方法一定要掌握
  2. 异常分运行时异常和编译时异常,要知道如何区分,编译时异常在写代码的时候编译器就会报错,运行时异常在程序运行时才会报错
  3. throws 抛异常,抛得最远只能到main方法, 如果再继续抛,到jvm虚拟机,它不会处理异常,会报错
  4. 手写异常,一般都要把异常抛出去,不然自己写的异常马上又处理 了,没有意义
  5. try catch 是直接把异常处理掉了,throws 是向上抛异常,也是一种异常的处理方式throws 抛异常,抛得最远只能到main方法, 如果再继续抛,到jvm虚拟机,它不会处理异常,会报错
  6. 手写异常,一般都要把异常抛出去,不然自己写的异常马上又处理 了,没有意义
  7. try catch 是直接把异常处理掉了,throws 是向上抛异常,也是一种异常的处理方式