转:Java异常处理
Exception和Error的区别
Exceception和Error都继承自Throwable类,在Java中只有声明为Throwabel类或者它的子类才能进行捕获或者抛出,
当然捕获和抛出基本都是对于Exception而言的,这里就说一下Exception和Error的区别
首先,Error通常是导致程序不正常的错误,很难被捕获同时也就很难被恢复,比如常见的NoClassDefError和
OutMemoryError都是如此
Exception是异常而不是错误,Exception是设计出来对有可能发生错误的程序进行捕获并且恢复,Eception分为两类,
编译期异常和运行期异常,编译期异常往往是要求捕获的,不捕获的话会在编译期报错导致程序无法运行下去,
比如InterruptException ,IOException,另外一种是运行期异常,这些异常不要求必须捕获,可以正常通过编译期,只有在
程序运行期间可能会发生错误,这时候会抛出运行期异常,比如NullPointerException,ArrayIndexOutBoundException
这里有个常见的问题 就是ClassNotFoundException和NoClassDefError,这里是跟Java的类加载机制有关
ClassNotFoundException往往是发生在编译期,使用Class.forName,在类路径下找不到相关的类,就会抛出这个异常
NoClassDefError则是发生在运行期的错误,在编译期可以正常编译通过,但是在运行期却找不到对应的类
Java中对待捕获错误往往应该注意两点:
1.捕获异常要具体,不能泛泛的捕获Exception了事,这样不利于出错时候的异常分析
2.不能忽略异常,有时候有人会在捕获异常后,字Catch中什么都不做,这样忽略了异常信息,在后面排错的时候更是无从下手
另外,频繁的try-catch-finally十分繁琐,有时候我们还要在finally中再次try-catch,在JDK7中,java推出了try-with-resource这种模式,
当需要关闭的资源实现了AutoCloseabel时,执行完try中的代码块后会自动调用close方法,这样简化了我们的写法
关于异常处理的性能问题
1.try-catch代码块会产生额外的性能开销,它会影响JVM对应代码的优化,所以应该只对需要的代码进行try-catch,而不是将所有的代码都放到try代码块中
2.抛出Exception的时候,JVM会对当前的栈进行快照,方便后期异常排除,所以应该避免频繁的抛出Exception
---------------------
原文:https://blog.csdn.net/sinat_22594643/article/details/84636652
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端