“【面试:Java异常】”的版本间差异
跳到导航
跳到搜索
第3行: | 第3行: | ||
=== 说说Java中异常的分类 === | === 说说Java中异常的分类 === | ||
[[File:Java 中的异常层次结构.png|600px]] | [[File:Java 中的异常层次结构.png|600px]] | ||
[[File:Java异常类.png|600px]] | |||
'''Throwable'''(可抛出):异常类的最终父类,它有两个子类,Error 与 Exception。 | |||
: Throwable中常用方法有: | |||
* getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。 | |||
* getMeage():返回异常的消息信息。 | |||
* printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。 | |||
异常对象都是派生于'''Throwable''' 类的一个实例: | 异常对象都是派生于'''Throwable''' 类的一个实例: | ||
# '''Error''' | # '''Error'''(错误):类层次结构描述了Java 运行时系统的内部错误和资源耗尽错误。 | ||
#* | #* 表示程序无法处理的错误,一般与程序员的执行操作无关。 | ||
# '''Exception''' | #* 理论上这些错误是不允许发生的,如果发生,也不应该试图通过程序去处理,所以Error不是try-catch的处理对象,而JVM一般的处理方式是终止发生错误的线程。 | ||
## '''VirtualMachineError'''(虚拟机错误):表示虚拟机出现错误。 | |||
##* 在Java运行时内存中,除程序计数器外的虚拟机栈、堆、方法区在请求的内存无法被满足时都会抛出 OutOfMemoryError; | |||
##* 而如果线程请求的栈深度超出虚拟机允许的深度时,就会抛出 StackOverFlowError。 | |||
## '''AWTError'''(AWT组件出错):这个错误并不是很常用。 | |||
##* AWT 与 Swing 的区别: | |||
##*# AWT是使用操作系统中的图形函数的抽象窗口工具,用C\C++编写,为了实现Java“一次编译,处处运行”的理念,AWT使用各个操作系统图形函数的交集,所以功能较差,但运行速度较快,适合嵌入式Java; | |||
##*# 而Swing组件是基于AWT编写的图形界面系统,它用纯Java编写,所以必然实现了“一次编译,处处运行”,但相较于AWT运行速度较慢,适合 PC 使用。 | |||
# '''Exception'''(异常): | |||
## '''RuntimeException''':由程序错误导致的异常属于RuntimeException; | ## '''RuntimeException''':由程序错误导致的异常属于RuntimeException; | ||
##: 派生于 RuntimeException 的异常包括: | ##: 派生于 RuntimeException 的异常包括: | ||
##* | ##* NullPointerException:空指针异常。调用了不存在的对象或未经实例化或初始化的对象时会抛出,如当试图操作一个空对象(赋值为null)的属性、方法时就会抛出。 | ||
##* | ##* ArithmeticException:算术条件异常。最常见的就是 0 作除数时会抛出。 | ||
##* | ##* ClassNotFoundException:类未找到异常。在通过反射 Class.forName(“类名”) 来获取类时,如果未找到则会抛出异常。 | ||
##* ArrayIndexOutOfBoundsException:数组索引越界异常。当试图操作数组的索引值为负数或大于等于数组大小时会抛出。 | |||
##* NegativeArraySizeException:数组长度为负值异常。一般在初始化数组大小为负值时抛出。 | |||
##* ArrayStoreException:数组类型不匹配值异常。例如将一个 Object 数组中加入一个 Integer 对象与一个 String 对象时,类型不匹配就会抛出。 | |||
##* IllegalArgumentException:非法参数异常。会在使用 Java 类库方法时传入参数值越界时抛出。 | |||
## '''其他异常''':由于像 I/O 错误这类问题导致的异常; | |||
##: 不是派生于 RuntimeException 的异常包括: | ##: 不是派生于 RuntimeException 的异常包括: | ||
##* | ##* IOException:I/O 错误; | ||
##* | ##* EOFExcption:试图在文件尾部后面读取数据; | ||
##* FileNotFound:试图打开一个不存在的文件; | |||
##* 试图根据给定的字符串查找 Class 对象,而这个字符串表示的类并不存在; | ##* 试图根据给定的字符串查找 Class 对象,而这个字符串表示的类并不存在; | ||
''' | === 关于 '''受查异常''' 与 '''非受查异常''' === | ||
# 非受查(unchecked) | 异常分为两类:可查异常与不可查异常。 | ||
# 受查(checked) | |||
# 非受查(unchecked) :派生于 Error 类或 RuntimeException 类的所有异常。【编译期不会检查,所以在程序中可不处理,但如果发生,会在运行时抛出。】 | |||
# 受查(checked) :所有其他的异常称为。【编译器要求必须处理,否则不能通过编译,使用try-catch捕获或者throws抛出】 |
2022年3月31日 (四) 08:03的版本
说说Java中异常的分类
Throwable(可抛出):异常类的最终父类,它有两个子类,Error 与 Exception。
- Throwable中常用方法有:
- getCause():返回抛出异常的原因。如果 cause 不存在或未知,则返回 null。
- getMeage():返回异常的消息信息。
- printStackTrace():对象的堆栈跟踪输出至错误输出流,作为字段 System.err 的值。
异常对象都是派生于Throwable 类的一个实例:
- Error(错误):类层次结构描述了Java 运行时系统的内部错误和资源耗尽错误。
- 表示程序无法处理的错误,一般与程序员的执行操作无关。
- 理论上这些错误是不允许发生的,如果发生,也不应该试图通过程序去处理,所以Error不是try-catch的处理对象,而JVM一般的处理方式是终止发生错误的线程。
- VirtualMachineError(虚拟机错误):表示虚拟机出现错误。
- 在Java运行时内存中,除程序计数器外的虚拟机栈、堆、方法区在请求的内存无法被满足时都会抛出 OutOfMemoryError;
- 而如果线程请求的栈深度超出虚拟机允许的深度时,就会抛出 StackOverFlowError。
- AWTError(AWT组件出错):这个错误并不是很常用。
- AWT 与 Swing 的区别:
- AWT是使用操作系统中的图形函数的抽象窗口工具,用C\C++编写,为了实现Java“一次编译,处处运行”的理念,AWT使用各个操作系统图形函数的交集,所以功能较差,但运行速度较快,适合嵌入式Java;
- 而Swing组件是基于AWT编写的图形界面系统,它用纯Java编写,所以必然实现了“一次编译,处处运行”,但相较于AWT运行速度较慢,适合 PC 使用。
- AWT 与 Swing 的区别:
- Exception(异常):
- RuntimeException:由程序错误导致的异常属于RuntimeException;
- 派生于 RuntimeException 的异常包括:
- NullPointerException:空指针异常。调用了不存在的对象或未经实例化或初始化的对象时会抛出,如当试图操作一个空对象(赋值为null)的属性、方法时就会抛出。
- ArithmeticException:算术条件异常。最常见的就是 0 作除数时会抛出。
- ClassNotFoundException:类未找到异常。在通过反射 Class.forName(“类名”) 来获取类时,如果未找到则会抛出异常。
- ArrayIndexOutOfBoundsException:数组索引越界异常。当试图操作数组的索引值为负数或大于等于数组大小时会抛出。
- NegativeArraySizeException:数组长度为负值异常。一般在初始化数组大小为负值时抛出。
- ArrayStoreException:数组类型不匹配值异常。例如将一个 Object 数组中加入一个 Integer 对象与一个 String 对象时,类型不匹配就会抛出。
- IllegalArgumentException:非法参数异常。会在使用 Java 类库方法时传入参数值越界时抛出。
- 其他异常:由于像 I/O 错误这类问题导致的异常;
- 不是派生于 RuntimeException 的异常包括:
- IOException:I/O 错误;
- EOFExcption:试图在文件尾部后面读取数据;
- FileNotFound:试图打开一个不存在的文件;
- 试图根据给定的字符串查找 Class 对象,而这个字符串表示的类并不存在;
- RuntimeException:由程序错误导致的异常属于RuntimeException;
关于 受查异常 与 非受查异常
异常分为两类:可查异常与不可查异常。
- 非受查(unchecked) :派生于 Error 类或 RuntimeException 类的所有异常。【编译期不会检查,所以在程序中可不处理,但如果发生,会在运行时抛出。】
- 受查(checked) :所有其他的异常称为。【编译器要求必须处理,否则不能通过编译,使用try-catch捕获或者throws抛出】