五十三:异常机制
上一节详细介绍了内部类,本节介绍下java中的异常机制.
1.理论整理
Error和Exception:
- 异常指程序运行中出现的不期而至的各种状况,比如文件找不到,网络连接失败等;
- 异常发生在程序运行期间,影响了正常的程序执行流程。
- 异常类型:
(1)检查性异常: 比如要打开一个不存在的文件时,异常就会发生;
(2)运行时异常: 编译时被忽略,但是运行时会出现异常,与检查性异常不同的地方就在于运行时异常很可能看不出来;
(3)错误ERROR: 错误不是异常,而是脱离程序员控制的问题,比如说栈的溢出问题,在编译时也是检查不到的。 -
异常体系结构:
(1)java把异常当做对象来处理,并定义一个基类java.lang.Throwavle作为所有异常的超类;
(2)在Java API中已经定义了许多异常类,这些异常类分为2大类: 错误ERROR和异常Exception - Error类对象由Java虚拟机(JVM)生成并抛出;
- Exception分支中有一个重要的子类RuntimeException(运行时异常),其他的异常可以被称为非运行时异常。
-
Error和Exception的区别:
(1)Error通常是灾难性的致命错误,是程序无法控制和处理的;
(2)Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常.
捕获和抛出异常:
- 异常处理的五个关键字:try、catch、finally、 throw、、throws
- 掌握try-catch-finally的搭配使用:
try{要运行的代码}
catch(异常类型,比如ArithmeticException e){捕获异常后执行的代码}
finally{不管有没有捕获都要运行的代码} - 在方法中使用throw new ArithmeticException(); 可以主动抛出异常;在定义方法时直接加上throws 来抛出方法处理不了的异常;
自定义异常
使用java内置的异常类可以描述在编程时出现的大部分异常情况,除此之外用户还可以自定义异常。用户自定义异常类,只需要继承Exception类即可
在程序中使用自定义异常类,大体可以分为以下几个步骤:
- 创建自定义异常类;
- 在方法中通过throw关键字抛出异常对象;
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch 语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作;
- 在出现异常的方法的调用者中捕获并处理异常。
经验总结
- 处理运行异常时,采用逻辑去合理规避同时辅助try-catch处理
- 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句去释放占用的资源
2.实践
-
举例:Error和Exception
-
在方法中用try-catch-finally来捕获处理异常:
-
捕获多个异常时,要从小到大!
-
自定义异常和两种异常捕获处理机制:
总结:本节讲了Java中的异常机制,包括Error和Exception,捕获和抛出异常的关键字,自定义异常等.
声明:本系列是"狂神说Java"教程的个人学习笔记,无意侵权~