5 自定义异常

自定义异常概述

当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());
        }


    }
}

throw和throws的区别

throws
1 用在方法声明后面,跟的是异常类名
2 可以跟多个异常类名,用逗号隔开
3 表示抛出异常,由该方法的调用者来处理

throw
1 用在方法体内,跟的是异常对象名
2 只能抛出一个异常对象名
3 表示抛出异常,由方法体内的语句处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值