zoukankan      html  css  js  c++  java
  • 自定义异常

    自定义异常

    自定义异常概述

    当java里面的异常无法满足开发者的需求时,可以自定义异常。

    package com.monkey1024.exception;
    
    public class UserService {
            //注册的方法
            public void register(String name){
    
                if(name.length()<6){
    
                    //需要在这里面一个抛出非法注册名的异常,不过java里面没有这个
                }
    
                //如果代码能执行到此处,证明用户名是合法的.
                System.out.println("注册成功!");
    
            }
    }
    

    上面是一个用户注册的代码,如果注册的用户名长度小于6,则需要抛出一个非法注册名的异常,不过java里面没有这个异常,这时,开发者可以自定义这个异常来满足需求

    如何自定义异常?

    可以看下其他Exception里面的源码进行参考。
    如果自定义异常是RuntimeException类型的,那就直接继承RuntimeException即可
    否则就继承Exception。
    继承之后一般提供两个构造方法,如下自定义名为IllegalNameException的异常

    package com.monkey1024.exception;
    
    public class IllegalNameException extends Exception{ //编译时异常
    //public class IllegalNameException extends RuntimeException{ //运行时异常
    
            //定义异常一般提供两个构造方法
            public IllegalNameException(){}
    
    
            public IllegalNameException(String msg){
                super(msg);
            }
    
        }
    

    使用自定义异常

    自定义好异常之后就可以使用了,将上面的代码修改一下:

    package com.monkey1024.exception;
    
    public class UserService {
            //注册的方法
            public void register(String name) throws IllegalNameException{
    
                if(name.length()<6){
    
                    //需要在这里面一个抛出非法注册名的异常,不过java里面没有类似的
                    //手动抛出异常
                    //注意是throw不是throws
                    //使用throw在方法体内抛出异常
                    throw new IllegalNameException();
                }
    
                //如果代码能执行到此处,证明用户名是合法的.
                System.out.println("注册成功!");
    
            }
    }
    

    关于throw,在方法内部出现某种情况,程序不能继续运行,就用throw把异常对象抛出

    来写一个测试类

    public class RegisterTest{
    
        public static void main(String[] args){
    
            //假如用户提供的用户名如下
            String username = "mk";
    
            //注册
            CustomerService cs = new CustomerService();
    
            try{
                cs.register(username);
            }catch(IllegalNameException e){
                System.out.println(e.getMessage());
            }
    
    
        }
    }
  • 相关阅读:
    【题解】SCOI2007组队
    【题解】Atcoder AGC#16 E-Poor Turkeys
    整数拆分 [dp+多项式插值]
    王子 [费用流]
    [ARC083F] Collecting Balls [建二分图+环套树定向+建拓扑图+树的拓扑序计数]
    [BZOJ3196] 二逼平衡树 [权值线段树套位置平衡树]
    [TJOI2017][bzoj4889] 不勤劳的图书管理员 [线段树套线段树]
    [HNOI2015][bzoj4009] 接水果 [整体二分+扫描线]
    [bzoj3065] 带插入区间第k小值 [重量平衡树套线段树]
    [luogu3676] 小清新数据结构题 [树链剖分+线段树]
  • 原文地址:https://www.cnblogs.com/JiXianSen/p/12150994.html
Copyright © 2011-2022 走看看