Java 核心 Exception 和 Error 有什么区别?

本文深入解析Exception与Error的区别,探讨运行时异常与一般异常的差异,对比NoClassDefFoundError与ClassNotFoundException,阐述异常处理的基本原则,包括捕获特定异常、避免swallow异常以及Throw early, catch late原则。
问题

Exception 和 Error 有什么区别?运行时异常与一般异常有什么区别?

解析

Exception 和 Error 都继承了 Throwable 类。只有 Throwable 的可以被 throw 和 catch。Exception 是程序正常情况下可以预料的,Error 通常会导致程序不可恢复。Exception 分为可检查异常和不检查异常,不检查异常就是运行时异常。
在这里插入图片描述

NoClassDefFoundError 和 ClassNotFoundException 区别

NoClassDefFoundError 通常发生在打包错误导致编译时找得到包而运行时找不到包导致的项目不能启动的错误,ClassNotFoundException 发生在比如用 Class.fromName() 加载一个不存在的包导致的 Exception。

异常处理的基本原则
  1. 捕获特定异常
  2. 不要 swallow 异常

例如:

try {
 // 业务代码
 // …
 Thread.sleep(1000L);
} catch (Exception e) {
 // Ignore it
}
Throw early, catch late 原则
  1. throw early
public void readPreferences(String fileName){
	 //...perform operations... 
	InputStream in = new FileInputStream(fileName);
	 //...read the preferences file...
}

public void readPreferences(String filename) {
	Objects. requireNonNull(filename);
	//...perform other operations... 
	InputStream in = new FileInputStream(filename);
	 //...read the preferences file...
}
  1. catch late

可考虑使用自定义异常,方便定位,同时注意不要暴漏敏感信息。如用户信息不允许输出。

(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值