异常


Exception:叫做异常,代表程序可能出现的问题。
我们通常会用 Exception 以及它的子类来封装程序出现的问题
运行时异常:RunTimeException 及其子类,编译阶段不会出现异常提醒
运行时出现的异常(如:数组索引越界异常)
编译时异常:编译阶段就会出现异常提醒的(如:日期解析异常)
总结

  1. 异常体系的最上层父类是谁?异常分为几类?
  • 父类:Exception
  • 异常分为两类:编译时异常、运行时异常
  1. 编译时异常和运行时异常的区别?
  • 编译时异常:没有继承 RuntimeException 的异常,直接继承于 Exception

编译阶段就会有错误提示,作用在于提醒程序员

  • 运行时异常:RuntimeException 本身和子类

编译阶段没有错误提示,运行时出现的,一般是由于参数传递错误带来的问题

异常作用

  1. 作用一:异常是用来查询bug的关键参考信息
  2. 作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况
    | 方法名称 | 说明 |
    | --- | --- |
    | public String getMessage() | 返回此 throwable 的详细信息字符串 |
    | public String toString() | 返回此可抛出的简短描述 |
    | public void printStackTrace() | 在底层是利用 System.err.println 进行输出
    把异常的错误信息以红色字体输出在控制台
    细节:仅仅是打印信息,不会停止程序运行 |

抛出处理

异常处理方式

  1. 捕获:try...catch

一般用在调用处,能让代码继续往下运行

  1. 抛出:throw throws

在方法中,出现异常了
方法就没有继续运行下去的意义了,采取抛出处理
让该方法结束运行并告诉调用者出现了问题

自定义异常

  1. 定义异常类
  2. 写继承关系
  3. 空参构造
  4. 带参构造

1.异常处理机制

捕获多个异常:从小到大

try{
    // 语句块
    if(b == 0){
    throw new ArithmeticException(); // throw 主动抛出异常
    }
} catch (Throwable){ // 要捕获的异常
} finally {	// 处理善后工作,可写可不写。
}

// throws 当前不处理异常,向上抛出异常
public void test(int a, int b) throws Exception{ 
    if(b == 0){
        throw new ArithmeticException(); // 主动抛出异常,一般在方法中用
}

2.编译时异常和运行时异常

运行时异常:

  • 都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
  • 这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
    运行时异常的特点是Java编译器不会检查它,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。

非运行时异常 (编译时异常):

  • RuntimeException以外的异常,类型上都属于Exception类及其子类。
  • 从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。
  • IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。
    Throwable分类图image.png

posted @   晒太阳的冰激凌  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示