day07-异常

1.异常

受检异常(checked exception):在编译时需要检查的异常,需要用try-catch或throws处理。在java中主要指除了Error和RuntimeException之外的异常

非受检异常(unchecked exception):不需要在编译时处理的异常。在java中派生于Error和RuntimeException的异常都是unchecked exception,其他都是checked exception

注意点:

前面使用的异常都是 RuntimeException 类或是它的子类,这些类的异常的特
点是:即使没有使用 try catch 捕获, Java 自己也能捕获,并且编译通过
( 但运行时会发生异常使得程序运行终止 )
如果抛出的异常是 IOException 等类型的非运行时异常,则 必须捕获,否则
编译错误 。也就是说,我们必须处理编译时异常,将异常进行捕捉,转化为
运行时异常
@Test
    public void test4(){
        String []str = new String[]{"AA","BB","CC"};
        try {
            for (int i = 0; i < 5; i++) {
                System.out.println(str[i]);//数组越界
            }
        } catch (Exception e) {
            e.printStackTrace();//打印异常类名、异常信息、异常所处位置
            System.out.println("--------------");
            System.out.println(e.getMessage());//获取异常信息
        } finally {
        }
    }

2.手动抛出异常

首先要生成异常类对象,然后通过 throw 语句实现抛出操作 ( 提交给 Java 运行环境)
IOException e = new IOException();
throw e;
可以抛出的异常必须是 Throwable 或其子类的实例。下面的语句在编译时将会产生语法错误:
throw new String("want to throw");

3.用户自定义异常类

用户自定义得异常类必须通过手动抛出 throw new MyException()

一般地,用户自定义异常类都是 RuntimeException 的子类。
自定义异常类通常需要编写几个 重载的构造器 。一个空参构造器,一个带String message构造器
自定义异常需要提供 serialVersionUID
自定义的异常通过 throw 抛出
自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。

//自定义异常类
public class MyException extends Exception{
    //1.首先得有一个UID
    static final long serialVersionUID = -33875169929948L;
    //有一个自己得ID
    private int idnumber;

    //2.重载的构造器
    public MyException(String message, int idnumber) {
        super(message);//new一个自定义异常类时所包含得信息,throw new MyException("人数不能为负数,不合理",2);
        this.idnumber = idnumber;
    }

    //3.get方法
    public int getIdnumber() {
        return idnumber;
    }
}
//测试MyException
public class MyExpTest {

    //1.有一个登记人数得方法
    public void regist(int num) throws MyException {
        if(num<0){
            throw new MyException("人数不能为负数,不合理",2);
        }else{
            System.out.println("登记人数:"+num);
        }
    }

    //2.一个管理方法
    public void manager() {
        //首先我们等级人数,登记100个人
        try {
            regist(-1);
        } catch (MyException e) {
//            e.printStackTrace();//打印异常类名,异常信息,异常所处位置
//            System.out.println("登记失败,出错种类"+e.getIdnumber());
            System.out.println(e.getMessage());
        } finally {
            System.out.println("本次登记结束");
        }
    }

    //3.main方法
    public static void main(String[] args) {
        MyExpTest t= new MyExpTest();
        t.manager();
    }
}

 4.总结

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值