Java面试-Java中的Exception和Error有什么区别?

Java中的Exception和Error有什么区别?

概念

  • Exception是程序正常运行中预料到可能会发生的错误,并且应该被捕获并进行相应的处理,是一种异常。
  • Error正常情况下不可能发生的错误,会导致JVM处以一种不可恢复的状态

Exception分类

  • 编译时异常(可检查异常Checked)表示编译器检测到这段代码在运行时可能会发生异常,要求我们对异常进行处理。
  • 运行时异常(不可检查异常unckecked)表示运行时出现的异常,通常是编码时的逻辑错误,不会强制要求编译器处理

编译时异常如:IOException、SQLExpection等

运行时异常如:NullPointerException、ArrayIndexOutOfBoundsException等

NoClassDefFoundError 和 ClassNotFoundException 有什么区别?

  • ClassNotFoundException:通常在使用Class.forName方法时,会传入一个类路径动态的进行加载,当找不到时就会出现这个异常。一般是类的名字传错了导致的。
  • NoClassDefFoundError:创建一个类的实例对象时,却找不到类的定义了。但是要查找的类在编译时是存在的,在运用找不到了,就会出现这个错误。一般是打包时漏掉了这个类或者jar包数据被篡改已经损坏了。

Throwable、Error和Exception之间的层次

在这里插入图片描述

分析异常处理的不当

案例一
try {
	// 业务代码
	// …
	Thread.sleep(1000L);
} catch (Exception e) {
	// Ignore it
}
分析
  1. 尽量不要捕获Exception这种通用异常,应该捕获特定的异常,以提高代码可读性
  2. 不要生吞异常,如果不抛出来或者不输出到日志,程序出错后很难判断异常在哪里抛出,以及是什么原因抛出
案例二
try {
	// 业务代码
	// …
} catch (IOException e) {
	e.printStackTrace();
}
分析

printStackTrace输出的内容在控制台可以看见,但是在分布式的生产环境下,如果发生异常,无法找到输出位置,最好是将异常输出到日志系统中去。

finally相关考点

finally不会被执行的情况
  1. try-cach 异常退出。
	try{
		system.exit(1)
	}finally{
		print(abc)
	}
  1. 无限循环
	try{
		while(ture){
			print(abc)
		}
	}finally{
		print(abc)
	}
finally执行对结果造成的影响

若try or catch中和finally中都有return时,finally中的return会覆盖前面的return

若try or catch 中的return执行时,会把return后的值进行暂存,并在执行完finally之后再进行返回

所以推荐不要再try中return数据


更多Java面试复习笔记和总结可访问我的面试复习专栏《Java面试复习笔记》,或者访问我另一篇博客《Java面试核心知识点汇总》查看目录和直达链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值