经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
每日一道Java面试题:说一说Java中的异常
来源:cnblogs  作者:JavaBuild  时间:2024/2/2 9:08:39  对本文有异议

写在开头

任何一个程序都无法保证100%的正常运行,程序发生故障的场景,我们称之为:异常,在Java中对于异常的处理有一套完善的体系,今天我们就来一起学习一下。
老样子,用一段简单的代码开始今天的学习。

我:“小二,上代码!”

JavaBuild君:“好嘞!几位爷,里面请~”

【代码示例1】

  1. //Java中经典的算术异常!
  2. public class Test {
  3. public static void main(String[] args){
  4. System.out.println(1/0);
  5. }
  6. }

编译通过,但运行时提示ArithmeticException(算术异常),这是典型的Java异常场景。

异常的分类

看完上面的内容,想必大家对于Java中的异常已经有了一个基本的了解了,其实,在Java中异常的分类有很多种,我们通过一个思维导图,快速了解。

在Java中有个Throwable类,为所有异常的祖先类,其下又分为两个子类,分别为Exception(异常)和Error(错误)。

Exception和Error的区别

  • Exception:程序本身可以处理的异常,可以通过catch或throw、throws进行捕获处理或抛出。
  • Error:程序无法自处理的错误!虚拟机错误、内存溢出、IO错误等。

受检查异常与非受检查异常

在Exception类下又分为两个子类:Checked Exception (受检查异常) 和 Unchecked Exception (不受检查异常)。

  • CheckedException:受检查异常,范围在编译期,此时若发生异常,无法通过编译,代码爆红。

受检查异常范围:IO 相关的异常、ClassNotFoundException、SQLException等,或者说除了运行时异常(RuntimeException)及其子类外,其他的异常几乎都是受检查异常。

  • UncheckedException:非受检查异常,顾名思义,即便存在该类型异常,代码也可通过编译,比如代码示例1中的算术异常,只是会在运行时报错,那它的涉及范围就好猜了,没错!就是RuntimeException及其子类!

RuntimeException

运行时异常有下面包含了很多子类,常用的有

  1. 1NullPointerException(空指针异常)
  2. 2IllegalArgumentException(非法参数异常)
  3. 3NumberFormatException(字符串转换为数字格式异常,IllegalArgumentException的子类)
  4. 4ArrayIndexOutOfBoundsException(数组越界异常)
  5. 5ClassCastException(类型转换异常)
  6. 6ArithmeticException(算术异常)
  7. 7SecurityException (安全错误比如权限不够)
  8. 8UnsupportedOperationException(不支持的操作异常,比如重复创建同一用户)
  9. ...

处理异常的2种方式

其实在上文中也已经提到了处理异常的2种方式,通过catch进行捕获,错误信息打印到控制台,或者打印到配置好的日志系统中;或者通过throws一层层的向上抛,直到调用者处理这个异常。

【代码示例2】

  1. public class Test {
  2. public static void main(String[] args) throws FileNotFoundException {
  3. String name = "JavaBuild";
  4. File file = new File(name);
  5. //方式一,throws抛出
  6. FileInputStream fileInputStream1 = new FileInputStream(file);
  7. //方式二,catch捕获,打印至控制台
  8. try {
  9. FileInputStream fileInputStream2 = new FileInputStream(file);
  10. } catch (FileNotFoundException e) {
  11. e.printStackTrace();
  12. }
  13. }
  14. }

原文链接:https://www.cnblogs.com/JavaBuild/p/18002488

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号