【Java核心技术36讲】第2讲:Exception和Error有什么区别

请对比Exception和Error,另外,运行时异常与一般异常有什么区别?


Exception和Error都继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者被捕获(catch),它是异常处理机制的基本组成类型 。 

Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

Exception可以分为可检查异常和不检查异常。可检查异常在源代码中必须显式的进行捕获处理,这是编译期检查的一部分。不检查异常就是运行时异常,类似NullPointerException、ArrayIndexOutOfBoundException之类,通常是跟代码有关的逻辑错误,具体根据需要来判断是否需要捕获处理。

Error是指在正常情况下,不大可能出现的情况,绝大多数的Error都会导致程序处于非正常的、不可恢复状态。


一个子类型问题:NoClassDefFoundError和ClassNotFoundException的区别

ClassNotFoundException继承自Exception类,是一个运行时异常。当应用程序运行的过程中尝试使用类加载器去加载Class文件时,如果没有找到指定类,就会抛出ClassNotFoundException异常。(一般情况下,当我们使用Class.forName()或者ClassLoader.loadClass以及使用ClassLoader.findSystemClass()在运行时加载类的时候,如果类没有被找到,那么就会导致JVM抛出ClassNotFoundException。)例如,之前使用JDBC连接Oracle数据库的时候,用Class.forName()加载JDBC的驱动,抛出了这个错误,检查了很久不是property的错误,是Oracle注册表里一个路径不对(因为没有卸载干净),所以找不到类,抛出异常。

NoClassDefFoundError继承自Error类,不用考虑捕获。当JVM在加载一个类的时候,如果这个类在编译时是可用的,但是在运行时找不到这个类的定义的时候,JVM就会抛出一个NoClassDefFoundError错误。


Throwable里的关键字:try-catch-finally块,throw、throws等。关键字作用(略)


异常处理时,注意的点:

1.尽量不要捕获类似Exception这样的通用异常,而是应该捕获特定异常。

2.不要生吞(swallow)异常。

从性能角度看Java的异常处理机制,这里有两个可能会相对昂贵的地方:

1.try-catch代码段会产生额外的性能开销,所以尽量只捕获有必要的代码段。

2.Java每实例化一个Exception,都会对当时的栈进行快照,这是一个相对比较重的操作。如果发生频繁,开销就不能被忽略了。


在做题的时候遇到过,try-catch-finally的一个点:如果try代码块中写了return语句,finally代码块中也写了return语句,将会按照finally里的return语句来返回。try里的return使控制权进入finally代码块,同样作用的还有break和continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
当你遇到 "Error: Could not create the Java Virtual Machine" 和 "A fatal exception has occurred. Program will exit." 这样的错误信息时,通常是在尝试运行 Java 应用程序时遇到了启动问题。这个错误可能是由以下几个原因引起的: 1. **JVM(Java Virtual Machine)路径问题**:Java_home环境变量可能没有设置正确,或者指定的JDK版本路径不存在。请检查系统环境变量是否指向了有效的Java安装目录。 2. **JVM内存不足**:如果虚拟机的堆内存设置太小,可能会导致无法创建。尝试增加-Xmx和-Xms选项的值,或者检查是否有限制系统内存的配置文件。 3. **Java版本不兼容**:应用程序可能需要特定版本的Java运行,而当前使用的Java版本不匹配。 4. **系统资源限制**:如果操作系统或防火墙阻止了JVM的启动,也可能导致此错误。 5. **第三方库冲突**:某些库可能存在版本兼容性问题,或者与JVM的某些组件冲突。 6. **JDK安装问题**:确保JDK已成功安装,并且其bin目录添加到了系统的PATH中。 为了解决这个问题,请尝试以下步骤: - 检查并更新JDK版本。 - 确保JDK环境变量设置正确。 - 重启计算机,有时候简单的重启可以解决一些临时的问题。 - 清除JVM缓存或者使用`jcleaner`清理可能的残留文件。 - 如果是企业应用,检查是否有特定的启动脚本或配置文件,确认它们正确无误。 相关问题: 1. 如何检查和设置Java_home环境变量? 2. 如何增加JVM的堆内存大小? 3. 怎么解决第三方库与JVM的冲突?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值