2021-02-21

异常

五个关键字
try:执行可能产生异常的代码
catch 捕获异常
finally 无论是否发生异常,代码总能执行
throws 声明方法可能抛出的各种异常
throw手动抛出异常
Exception 异常层次的父类
ArithmeticException 算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问 null对象成员
ClassNotFoundException 不能加载所需的类
IllegalArgumentException 方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatException 数字格式转换异常。如把“ABC”转换成数字

当在catch语句块中出现异常时加入强制退出 System.exit(1)时,直接中断程序而不是进入finally块

在catch中加入return
顺序为 try-catch-finally-return

多重catch块中
排列catch语句的顺序,先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
需求,在控制台输入1-3之间的数字,如果输入不是数字给出提示,不管对错都输出欢迎提出建议

public class Subject {
    private static Logger logger=Logger.getLogger(Subject.class);
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        try {
            logger.info("请输入一个数字");
            int num=input.nextInt();
            switch (num){
                case 1:
                    logger.info("Java");
                    break;
                case 2:
                    logger.info("Html");
                    break;
                case 3:
                    logger.info("Python");
                    break;

            }
        }
        catch (InputMismatchException ex){
            logger.debug("程序出错");
            logger.debug(ex.getMessage());
        }


        catch (Exception ex){
            logger.debug("程序出错");
            logger.debug(ex.getMessage());

        }


        finally {
            logger.info("欢迎提出建议");
        }
    }
}


这里运用了jar日志的形式
捕获异常如果输入不是数字时显示错误信息,但是由于有finally,继续执行后面语句并不会终止程序

在这里插入图片描述
在这里插入图片描述
get message是获取错误信息
也可以用InputMismatchException来获取错误信息
在这里插入图片描述
我们还可以重写异常方法例如:

public class MyException extends RuntimeException {
    public MyException() {
        super();
    }

    public MyException(String message) {
        super(message);
    }
}

然后建立新的异常方法,例如输入年龄判断
如果年龄不在1-100之间则出现异常报错年龄必须在1-100之间

public class Person {
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws Exception{
        if (age>=1&&age<=100){
        this.age = age;}
        else {
            throw new MyException("年龄必须在1-100之间");
        }
    }
}

throws定义异常方法
throw抛出年龄不在1-100的异常

public class Test {
    public static void main(String[] args){
        Person person = new Person();
        try {
person.setAge(101);
        }catch (Exception ex){
            ex.printStackTrace();
        }

        }
    }

测试如果输入的是101
catch捕获异常

在这里插入图片描述
而且这里的异常是自己建的MyException

异常分为运行时和检查时
运行时不要求程序必须做处理
检查时程序必须处理该异常

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值