Java教程

Java基础 -- 异常处理

本文主要是介绍Java基础 -- 异常处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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基础 -- 异常处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!