关于异常机制篇
异常描述
注:自用
1,Java中的异常分为哪几类?各自的特点是什么?
Java中的异常 可以分为 可查异常(Checked Exception)、运行时异常(Runtime Exception) 和 错误(Error)三类。可查异常需要在代码中显式捕获或声明抛出,运行时异常 可以选择 捕获或声明抛出,错误 通常是指 虚拟机 相关的问题,无法恢复。
2,Java中的异常处理机制是什么?
Java的异常处理机制 使用 try-catch-finally语句块 来处理异常。try块用于包裹可能抛出异常的代码,catch块用于捕获和处理异常,finally块用于定义 无论 是否异常 都需要执行的代码。
3,描述⼀下try-catch-finally语句块的执行流程。
当try块中的代码出现异常时,会立即跳转到对应的catch块进行处理。如果发现catch块中可以处理该异常,会执行相应的代码,然后继续执行finally块中的代码;如果没有匹配的catch块,当前方法会立即结束,异常会被抛给上⼀级调用者或者由虚拟机处理。不论是否发生异常,finally块中的代码总会被执行。
4,throw和throws关键字的作用是什么?
throw关键字 用于 主动抛出⼀个异常对象,可以在任何地方使用。throws关键字 用于在方法上 声明 可能抛出的异常类型,告诉调用者需要处理这些异常。
5,RuntimeException和Checked Exception有什么区别?
RuntimeException 是运行时异常,程序员可以选择捕获或声明抛出,但不强制要求。CheckedException 是可查异常,需要在代码中显式捕获或声明抛出。区别在于编译器是否会强制检查异常的处理。
6,什么是异常链?
异常链 是指 在异常处理过程中,可以通过在catch块中传递异常对象来保留先前抛出的异常信息。这样可以将多个异常相关联,方便后续的异常分析和处理。
7,什么时候应该使用finally块?
finally块⼀般用于执行无论是否发生异常 都需要执行的代码,例如释放资源、关闭连接等。在异常处理过程中,finally块中的代码总会被执行,保证资源的释放。
8,什么是异常处理的最佳实践?
异常处理的最佳实践包括 尽早捕获异常、准确抛出异常、避免空的catch块、适当使用finally块、理解并合理使用异常类型等。
9,Error和Exception有什么区别?
Error 是指 虚拟机相关的问题 或者 系统级别的问题,⼀般由虚拟机处理。Exception是指程序运行时出现的异常,需要程序员处理。
10,什么是断言(assertion)和断言异常?
断言用于 在程序中 进行验证和调试,通常用于在开发过程中检查程序的正确性。断言异常是⼀种特殊的异常,如java.lang.AssertionError,用于表示断言失败。
11,什么是异常处理的原则?
异常处理的原则包括 “捕获并处理异常”、“仅捕获那些你能处理的异常”、“尽量不要捕获太宽泛的异常类型” 和 “使用合适的日志记录异常”。
12,描述⼀下finally块中的return语句会如何影响方法的返回值?
如果在finally块中使用了return语句,会覆盖在try块中使用的return语句,即以finally块中的return值为准。
13,什么是异常的传递?
异常的传递是指 当⼀个方法 抛出异常时,该异常会沿着调用栈向上传递,直到被捕获或者到达程序的顶层。
14,什么是异常的过滤?
异常的过滤 是指 在catch块中通过条件判断来筛选和处理特定的异常情况。
15,在catch块中如何处理多个异常?
可以使用多个catch块来处理不同的异常类型,或者使用⼀个catch块来处理多个异常类型,使用多个“|” 分隔异常类型。
16,什么是堆栈轨迹(Stack Trace)?
堆栈轨迹是指异常抛出时输出的⼀系列方法调用的信息,包括方法名、行号等,用于追踪异常发生的路径。
17,如何自定义异常?
可以通过继承Exception 或者RuntimeException类 来创建 自定义异常类,并添加相应的构造方法和其他属性。
18,说⼀下NullPointerException和ArrayIndexOutOfBoundsException异常
NullPointerException 是指 访问 空对象的属性或方法时 抛出的异常,ArrayIndexOutOfBoundsException 是指 访问数组越界时 抛出的异常。
19,如何处理异常时避免内存泄漏?
可以在catch块中及时释放资源,尤其是对于输入输出流、数据库连接等需要手动关闭的资源。
20,异常处理与错误码处理方式有何不同?
异常处理 是⼀种 以异常对象的形式表示程序执行中遇到的异常情况的方式,而错误码处理则是根据不同的情况 返回 不同的预定的错误码。