2021最新版java异常面试题有哪些

发布时间:2021-10-12 10:28:00 作者:iii
来源:亿速云 阅读:137

这篇文章主要介绍“2021最新版java异常面试题有哪些”,在日常操作中,相信很多人在2021最新版java异常面试题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”2021最新版java异常面试题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、Java异常架构与异常关键字

1. Java异常简介

Java异常是Java提供的一种识别及响应错误的一致性机制。 Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪”抛出,异常信息回答了“为什么”会抛出。

2. Java异常架构

2021最新版java异常面试题有哪些

1. Throwable

2. Error(错误)

3. Exception(异常)

运行时异常

编译时异常

4. 受检异常与非受检异常

受检异常

非受检异常

3. Java异常关键字

二、 Java异常处理

1. 声明异常

注意

2. 抛出异常

3. 捕获异常

程序通常在运行之前不报错,但是运行后可能会出现某些未知的错误,但是还不想直接抛出到上一级,那么就需要通过try…catch…的形式进行异常捕获,之后根据不同的异常情况来进行相应的处理。

4. 如何选择异常类型

可以根据下图来选择是捕获异常,声明异常还是抛出异常

2021最新版java异常面试题有哪些

5. 常见异常处理方式

直接抛出异常

通常,应该捕获那些知道如何处理的异常,将不知道如何处理的异常继续传递下去。传递异常可以在方法签名处使用 throws 关键字声明可能会抛出的异常。

private static void readFile(String filePath) throws IOException {
File file = new File(filePath);
String result;
BufferedReader reader = new BufferedReader(new FileReader(file));
while((result = reader.readLine())!=null) {
System.out.println(result);
}
reader.close();
}

封装异常再抛出

有时我们会从 catch 中抛出一个异常,目的是为了改变异常的类型。多用于在多系统集成时,当某个子系统故障,异常类型可能有多种,可以用统一的异常类型向外暴露,不需暴露太多内部异常细节。

private static void readFile(String filePath) throws MyException {
try {
// code
} catch (IOException e) {
MyException ex = new MyException("read file failed.");
ex.initCause(e);
throw ex;
}
}

捕获异常

在一个 try-catch 语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理

private static void readFile(String filePath) {
try {
// code
} catch (FileNotFoundException e) {
// handle FileNotFoundException
} catch (IOException e){
// handle IOException
}
}

同一个 catch 也可以捕获多种类型异常,用 | 隔开

private static void readFile(String filePath) {
try {
// code
} catch (FileNotFoundException | UnknownHostException e) {
// handle FileNotFoundException or UnknownHostException
} catch (IOException e){
// handle IOException
}
}

自定义异常

习惯上,定义一个异常类应包含两个构造函数,一个无参构造函数和一个带有详细描述信息的构造函数(Throwable 的 toString 方法会打印这些详细信息,调试时很有用)

public class MyException extends Exception {
public MyException(){ }
public MyException(String msg){
super(msg);
}
// ...
}

try-catch-fifinally

当方法中发生异常,异常处之后的代码不会再执行,如果之前获取了一些本地资源需要释放,则需要在方法正常结束时和 catch 语句中都调用释放本地资源的代码,显得代码比较繁琐,fifinally 语句可以解决这个问题。

private static void readFile(String filePath) throws MyException {
	File file = new File(filePath);
	String result;
	BufferedReader reader = null;
	try {
		reader = new BufferedReader(new FileReader(file));
		while((result = reader.readLine())!=null) {
			System.out.println(result);
		}
	}
	catch (IOException e) {
		System.out.println("readFile method catch block.");
		MyException ex = new MyException("read file failed.");
		ex.initCause(e);
		throw ex;
	}
	finally {
		System.out.println("readFile method finally block.");
		if (null != reader) {
			try {
				reader.close();
			}
			catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
catch (IOException e) {
System.out.println("readFile method catch block.");
return;
}
readFile method catch block.
readFile method finally block.

try-with-resource

上面例子中,fifinally 中的 close 方法也可能抛出 IOException, 从而覆盖了原始异常。JAVA 7 提供了更优雅的方式来实现资源的自动释放,自动释放的资源需要是实现了 AutoCloseable 接口的类。

private static void tryWithResourceTest(){
	try (Scanner scanner = new Scanner(new FileInputStream("c:/abc"),"UTF-8")){
		// code
	}
	catch (IOException e){
		// handle exception
	}
}

三、Java异常常见面试题

1. Error 和 Exception 区别是什么?

2. 运行时异常和一般异常(受检异常)区别是什么?

3. JVM 是如何处理异常的?

4. throw 和 throws 的区别是什么?

throws 关键字和 throw 关键字在使用上的几点区别如下

5. final、finally、finalize 有什么区别?

6. NoClassDefFoundError 和 ClassNotFoundException 区别?

7. try-catch-finally 中哪个部分可以省略?

2021最新版java异常面试题有哪些

8. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

2021最新版java异常面试题有哪些

2021最新版java异常面试题有哪些

9. 类 ExampleA 继承 Exception,类 ExampleB 继承ExampleA。

2021最新版java异常面试题有哪些

2021最新版java异常面试题有哪些

10. 常见的 RuntimeException 有哪些?

11. Java常见异常有哪些

四、Java异常处理最佳实践

1. 在 finally 块中清理资源或者使用 try-with-resource 语句

2021最新版java异常面试题有哪些

2. 优先明确的异常

2021最新版java异常面试题有哪些

3. 对异常进行文档说明

2021最新版java异常面试题有哪些

4. 使用描述性消息抛出异常

2021最新版java异常面试题有哪些

5. 优先捕获最具体的异常

2021最新版java异常面试题有哪些

6. 不要捕获 Throwable 类

2021最新版java异常面试题有哪些

7. 不要忽略异常

2021最新版java异常面试题有哪些

8. 不要记录并抛出异常

2021最新版java异常面试题有哪些

9. 包装异常时不要抛弃原始的异常

2021最新版java异常面试题有哪些

10. 不要使用异常控制程序的流程

不应该使用异常控制应用的执行流程,例如,本应该使用if语句进行条件判断的情况下,你却使用异常处理,这是非常不好的习惯,会严重影响应用的性能。

11. 使用标准异常

如果使用内建的异常可以解决问题,就不要定义自己的异常。Java API 提供了上百种针对不同情况的异常类型,在开发中首先尽可能使用 Java API 提供的异常,如果标准的异常不能满足你的要求,这时候创建自己的定制异常。尽可能得使用标准异常有利于新加入的开发者看懂项目代码。

12. 异常会影响性能

2021最新版java异常面试题有哪些

13. 总结

异常处理-阿里巴巴Java开发手册

2021最新版java异常面试题有哪些

到此,关于“2021最新版java异常面试题有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 2021有哪些最新版的Dubbo面试题
  2. 2021有哪些最新版的Elasticsearch面试题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:vbs如何屏蔽端口

下一篇:Service Mesh方式是如何实现的以及比较常见的几种Service Mesh实现方案

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》