Java进阶之旅第八天

Java进阶之旅第八天

异常

作用

  • 自己写的代码在运行过程中发生某种错误,抛出的错误进行处理.使得自己能快速甄别错误信息
  • 对可能出现的问题进行封装,查询bug的关键参考信息

分类

编译时异常
  • 1.继承自 Exception 类,但不是继承自 RuntimeException 类。
  • 2.在代码中必须显式地处理或声明抛出编译时异常。
  • 3.编译时异常发生的地方必须处理该异常,否则代码无法通过编译。
  • 4.编译时异常通常表示外部环境或资源的错误或异常情况,需要在代码中明确处理,以保证程序的健壮性和可靠性。
运行时异常
  • 继承自 RuntimeException 类。
  • 在代码中可以选择性地处理或声明抛出运行时异常。
  • 运行时异常可以不被显式地捕获,也不需要在方法签名中声明抛出。
  • 运行时异常通常表示程序逻辑的错误或异常情况,如空指针异常、数组越界异常等。
  • 运行时异常一般由程序员编码错误导致,需要通过代码的调试和修复来解决。

异常的处理方式

默认的处理方式
  • 1.把异常的名称,异常的原因以及异常出现的位置等信息输出在控制台
  • 2.程序停止执行,下面的代码不会再执行了
  • 代码: System.out.println(2/0);
  • 错误: Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:5)
自己处理(捕获异常)
  • 语法:try{可能出现异常的代码块}catch(异常类名 变量名){异常的处理代码}
  • 目的: 当代码出现异常时,可以让程序继续往下执行
  • 代码:
        try {
            System.out.println(2/0);
        }catch(ArithmeticException e){
            System.out.println("算术异常!");
        }
        System.out.println(("程序没有被停止"));
  • 结果:
算术异常!
程序没有被停止
  • 细节:
    • 1.只有出现异常才会执行catch中的代码
    • 2.在出现多个问题时,可以写过个catch进行捕获处理
    • 3.当出现错误之后,会立即跳转到对应的catch中,并不再运行错误语句之后的代码
    • 4.如果要写父类接收错误(Exception),需要将其写到最后一个catch中
    • 5.在JDK7之后,我们可以在catch中同时捕获多个异常,中间用|隔开,在过个错误的处理方案一致时可以使用,例子: catch(ArithmeticException | ArrayIndexOutOfBoundsException e){}
    • 6.代码中遇到的问题没有catch处理,会使用默认方式处理

异常的常见方法

Throwable 的成员方法
方法名说明
public String getMessage()返回此throwable的详细消息字符串
public String toString()返回此可抛出的剪短描述
public void printStackTrace()(常用把异常的错误信息输出在控制台(不会结束程序
代码
        try {
            System.out.println(2/0);
        }catch(ArithmeticException e){
            System.out.println(e.getMessage());
            System.out.println(e.toString());
            e.printStackTrace();
        }
        System.out.println(("程序没有被停止"));
结果
/ by zero
java.lang.ArithmeticException: / by zero
程序没有被停止
java.lang.ArithmeticException: / by zero
	at Main.main(Main.java:7)

异常的抛出处理

throws和throw
  • throws
    • 注意: throws写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常
    • 写法: public void 方法名() throws 异常类名1,异常类名2...{...}
    • 编译时的异常: 必须要写,运行时的异常: 可以不写
  • throw
    • 注意: 写在方法内,结束方法,手动抛出异常对象,交给调用者方法中下面的代码不再执行
    • 写法: public void 方法名() {throw new NullPointerException();}

自定义异常

  • 步骤

    • 1.定义异常类(起名字技巧: 异常名+Exception)
    • 2.写继承关系(编译时: Exception,运行时: RuntimeException)
    • 3.空参构造/有参构造(继承之后快捷键Alt+Insert,可以选择构造函数,重写前两个即可)
  • 代码

public class NameException extends RuntimeException{
    public NameException() {
    }

    public NameException(String message) {
        super(message);
    }
}
  • 调用: 正常调用即可.例如: throw new NameException()
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不吃牛肉!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值