标签:常见问题 Java -- try finally catch 异常 throw
Java基础 -- 异常处理
1.异常体系结构
(图片来源见水印)
*常见问题:Error和Exception的区别?
- Error:程序无法处理的错误,error发生时,JVM会选择线程终止
- Exception:程序本身可以处理的异常,可以用catch来捕获
*常见问题:Checked Exception 和 Unchecked Exception的区别?
- checked exception:受检查异常,编译过程中不被catch或者throw的话没办法通过编译
- unchecked exception:不受检查编译,编译过程中不被catch或者throw的话也可以通过编译
2.怎么处理异常?
处理异常一共有三种方式:
- 方式一:对异常进行捕捉并处理try-catch-finally
try {
//可能会出现异常的代码
} catch (异常类型1 异常类型对象) {
//发生异常1后执行的代码
} catch (异常类型2 异常类型2) {
...
//发生异常2后执行的代码
} finally {
//不发生异常执行的代码
}
【注】多个catch:异常范围小的放在前面,范围大的放在后面
*常见问题:try,catch以及finally的作用?
- try块内放置可能会引起异常的代码
- catch块用于处置指明异常类型的代码
- finally块用于回收try块内打开的物理资源(异常机制会保证finally块总被执行)
*常见问题:finally什么情况下不会被执行?
- 不进入try块:在try块之前就返回
- 程序中止:System.exit(0);JVM中止运行
- 线程中止:守护线程中存在finally代码块,那么当所有的非守护线程中止时,守护线程被kill掉,其finally代码块是不会执行的
*常见问题:finally的执行与return关系
-
情形一:try-catch块中有return语句,finally语句仍会被执行
-
情形二:finally块中有return语句,finally块中的return语句会覆盖try-catch中的return语句
-
方式二:throw抛出异常
throw只抛出异常,不处理异常
throw new 异常类名(参数);
- 方式三:throws声明异常
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
*常见问题:throw和throws的区别?
-
位置不同:
- throws作用在函数上,后面可以跟着多个异常类;
- throw作用在函数内,后面跟着异常对象
-
功能不同:
- throw抛出异常(只是抛出异常,不处理异常),到这一步功能结束
- throws声明异常,让调用者知道可能出现的问题,有异常交给上层处
理
-
发生异常可能性不同:
- throws表示异常不一定会发生,只是一种可能性;
- throw表示一定发生了异常,抛出了某种异常对象
*常见问题:final, finally, finalize的区别?
-
final:修饰符,用于修饰类,变量或者方法。被修饰的类不能被其他类继承;被修饰的变量必须显式指定初始值且赋值后不能被重新赋值,通常与static一起使用创建类常量;被修饰的方法可以被子类继承,不能被子类重写
-
fianlly:用于异常处理
-
finalize:方法名,主要用于垃圾回收
3.自定义异常类
https://zhuanlan.zhihu.com/p/450346339
4.参考资料
https://www.cnblogs.com/13roky/p/14672500.html
https://www.bilibili.com/read/cv16217199?spm_id_from=333.999.0.0
标签:常见问题,Java,--,try,finally,catch,异常,throw 来源: https://www.cnblogs.com/Claire-is-here/p/16368819.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。