Java 中,异常处理机制分为 声明异常、抛出异常和捕获异常,根据异常的情况,可以对异常进行不同处理:
声明异常
对于知道如何进行处理的异常,一般要进行捕获,但此时不知道如何将处理的异常继续传递下去,可以通过在方法签名中使用 throws
来声明可能抛出的异常,有如下两点需要注意:
-
非受检异常(Error、RuntimeException 及其子类) 不能使用
throws
关键字来声明要抛出的异常; -
一个方法出现编译时异常,就需要
try...catch/throws
进行处理,否则会导致编译失败 ;
抛出异常
一旦觉得某些异常无法处理,但同时又不用我们进行处理,那我们就可以将其抛出。一般是使用 throw
在方法内部抛出一个 Throwable
类型的异常。
捕获异常
程序在运行前一般不会报错,但是运行后可能出现某些未知错误,如果不想直接抛出给上一级处理,那我们就需要通过 try...catch...
的形式对异常进行捕获,然后根据不同的情况来进行相应处理。
Error 和 Exception 的区别?
Exception
类的异常能够在程序中进行捕获并处理,遇到该类异常,应该进行处理,从而使程序能够继续正常运行;
Error
类的错误一般是虚拟机相关错误,如系统崩溃、内存不足、堆栈溢出等,编译器不会检测这类错误。我们也不会对这类错误进行捕获,一旦发生,一般都会导致程序崩溃无法恢复;
运行时异常和受检异常的区别?
运行时异常包括 RuntimeException
及其子类,表示 JVM 运行期间可能出现的异常,不会被 Java 编译器检查。
而受检异常是除开 RuntimeException
及其子类之外的其他 Exception
,会被 Java 编译器检查。
两者的 区别 在于:是否需要调用者必须处理该异常,如果必须处理,则一般使用受检异常,否则一般选择非受检异常(RuntimeException);
throw 和 throws 的区别?
- throw:用于在方法内部抛出异常对象
-
throw
用在方法体内,表示抛出异常,由方法体内的语句处理; -
throw
是具体向外抛出异常的动作,所以抛出的是一个异常实例,执行throw
一定是抛出了某种异常;
- throws:用于在方法签名上声明该方法所要抛出的异常
-
throws
语句使用在方法声明后,表示若抛出异常,则由该方法的调用者来进行异常的处理; -
throws
主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型; -
throws
表示出现异常的一种可能性,并非一定发生该种异常;
final、finally、finallize 的区别?
final
用于修饰类、方法、变量,修饰类时表示类不能被继承;修饰方法时表示方法不能别重写,但是能够被重载;修饰变量时表示该变量是一个常量无法被重写赋值;
finally
一般作用于 try...catch
代码块,处理异常时,通常将必须要执行的代码放在 finally
代码块中,表示无论是否出现异常,此代码块均执行,一般用来存放一些关闭资源的代码;
finallize
是一个方法,属于 Object
类,Java 允许用 finallize()
方法在垃圾回收器将对象从内存中清除前做一些必要的清理工作;
常见的 RuntimeException 异常?
-
ClassCastException
-
IndexOutOfBoundsException
-
NullPointerException
-
ArrayStoreException
-
BufferOverFlowException
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
学习分享,共勉
这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
中高级Java开发面试高频考点题笔记300道.pdf
架构进阶面试专题及架构学习笔记脑图
Java架构进阶学习视频分享
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
IGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**