“【面试:Java异常】”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
 
第1行: 第1行:
[[category:面试]]
[[category:面试]]


=== 说说Java中异常的分类 ===
== 说说Java中异常的分类<ref name="JavaCore_异常">[[核心技术:异常、断言和日志#错误处理]]</ref> ==
[[File:Java 中的异常层次结构.png|600px]]
[[File:Java 中的异常层次结构.png|600px]]
[[File:Java异常类.png|600px]]
[[File:Java异常类.png|600px]]
第10行: 第10行:
* getMeage():返回异常的消息信息。
* getMeage():返回异常的消息信息。
* printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
* printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。


异常对象都是派生于'''Throwable''' 类的一个实例:
异常对象都是派生于'''Throwable''' 类的一个实例:
第45行: 第46行:
# 非受查(unchecked) :派生于 Error 类或 RuntimeException 类的所有异常。【编译期不会检查,所以在程序中可不处理,但如果发生,会在运行时抛出。】
# 非受查(unchecked) :派生于 Error 类或 RuntimeException 类的所有异常。【编译期不会检查,所以在程序中可不处理,但如果发生,会在运行时抛出。】
# 受查(checked) :所有其他的异常称为。【编译器要求必须处理,否则不能通过编译,使用try-catch捕获或者throws抛出】
# 受查(checked) :所有其他的异常称为。【编译器要求必须处理,否则不能通过编译,使用try-catch捕获或者throws抛出】
== 参考 ==
<references/>

2022年4月1日 (五) 01:37的最新版本


说说Java中异常的分类[1]

Java 中的异常层次结构.png Java异常类.png

Throwable(可抛出):异常类的最终父类,它有两个子类,Error 与 Exception。

Throwable中常用方法有:
  • getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。
  • getMeage():返回异常的消息信息。
  • printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。


异常对象都是派生于Throwable 类的一个实例:

  1. Error(错误):类层次结构描述了Java 运行时系统的内部错误和资源耗尽错误。
    • 表示程序无法处理的错误,一般与程序员的执行操作无关。
    • 理论上这些错误是不允许发生的,如果发生,也不应该试图通过程序去处理,所以Error不是try-catch的处理对象,而JVM一般的处理方式是终止发生错误的线程。
    1. VirtualMachineError(虚拟机错误):表示虚拟机出现错误。
      • 在Java运行时内存中,除程序计数器外的虚拟机栈、堆、方法区在请求的内存无法被满足时都会抛出 OutOfMemoryError;
      • 而如果线程请求的栈深度超出虚拟机允许的深度时,就会抛出 StackOverFlowError。
    2. AWTError(AWT组件出错):这个错误并不是很常用。
      • AWT 与 Swing 的区别:
        1. AWT是使用操作系统中的图形函数的抽象窗口工具,用C\C++编写,为了实现Java“一次编译,处处运行”的理念,AWT使用各个操作系统图形函数的交集,所以功能较差,但运行速度较快,适合嵌入式Java;
        2. 而Swing组件是基于AWT编写的图形界面系统,它用纯Java编写,所以必然实现了“一次编译,处处运行”,但相较于AWT运行速度较慢,适合 PC 使用。
  2. Exception(异常):
    1. RuntimeException:由程序错误导致的异常属于RuntimeException;
      派生于 RuntimeException 的异常包括:
      • NullPointerException:空指针异常。调用了不存在的对象或未经实例化或初始化的对象时会抛出,如当试图操作一个空对象(赋值为null)的属性、方法时就会抛出。
      • ArithmeticException:算术条件异常。最常见的就是 0 作除数时会抛出。
      • ClassNotFoundException:类未找到异常。在通过反射 Class.forName(“类名”) 来获取类时,如果未找到则会抛出异常。
      • ArrayIndexOutOfBoundsException:数组索引越界异常。当试图操作数组的索引值为负数或大于等于数组大小时会抛出。
      • NegativeArraySizeException:数组长度为负值异常。一般在初始化数组大小为负值时抛出。
      • ArrayStoreException:数组类型不匹配值异常。例如将一个 Object 数组中加入一个 Integer 对象与一个 String 对象时,类型不匹配就会抛出。
      • IllegalArgumentException:非法参数异常。会在使用 Java 类库方法时传入参数值越界时抛出。
    2. 其他异常:由于像 I/O 错误这类问题导致的异常;
      不是派生于 RuntimeException 的异常包括:
      • IOException:I/O 错误;
      • EOFExcption:试图在文件尾部后面读取数据;
      • FileNotFound:试图打开一个不存在的文件;
      • 试图根据给定的字符串查找 Class 对象,而这个字符串表示的类并不存在;


关于 受查异常非受查异常

异常分为两类:可查异常与不可查异常。
  1. 非受查(unchecked) :派生于 Error 类或 RuntimeException 类的所有异常。【编译期不会检查,所以在程序中可不处理,但如果发生,会在运行时抛出。】
  2. 受查(checked) :所有其他的异常称为。【编译器要求必须处理,否则不能通过编译,使用try-catch捕获或者throws抛出】


参考