作为一个java学习者,深刻理解异常对我们造成的困扰,有些东西,你不弄透,会一直缠着你,一定要花一些时间,彻底弄通,这样以后就不用再怕了
异常
一.java调试时出现和错误和异常分为error和Exception两种:
error 表示恢复很困难的情况下的一种严重问题,程序员无法处理。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。它表示如果程序运行正常,从不会发生的情况,这是程序员可以处理的异常。
二.接下来主要讲解异常的运行机制:
(1)异常主要分为运行时异常(RuntimeException )与非运行时异常
两者的区别:
1. 运行时异常称之为:非检查异常; 非运行时异常称之为:检查异常
2. 运行时异常即只有运行才会报异常,如10/0,但 非运行时异常是编译之后必须用try..catch抛出异常才可正常运行
3.运行时异常不要求异常链的其他类进行处理,即只需要在最后一层进行处理抛出的异常就可以,节约了代码;而非 运行时异常要求各个环节必须要处理,只要涉及到异常的环节必须要处理异常,这就会造成代码的不整洁和冗余
(2) java是如何为我们处理异常的呢?— — 主要通过五大关键字
try:将程序中有可能出现问题的代码放在这
catch:一旦程序出现异常立即进入相应的catch模块
finally:不论程序是否出现异常都会执行(多用于释放资源)
throw:立即抛出异常,单行使用,多用户自定义异常
throws:方法声明抛出多个异常,多在方法的()后面,可接多个异常
(3)异常的运行机制
Java程序一旦出现异常,jvm(java虚拟机)就会立刻new一个类的对象出来,jvm会自动的把这个异常的相关信息保存 到这个异常类的对象中去。
比如:10/0 这个操作之后 就会惊动jvm,jvm就会创建一个arithmeticException这个对象的类出来,你刚才所有的操作都会记录在这个对象中, e.getStackTrace可以将错误信息打印出来便于查看
(4)对于一些系统没有定义的异常,但是不满足业务需求的条件,我们想要让系统认为他是异常,比如,年龄低于18岁的人不能办理身份证,那就只能自己定义一个异常,继承自runtimeException,
public class StuAgeException extends RuntimeException {
public StuAgeException(String string) {}//空构造
}
注意:RuntimeException没有规定每个都要处理异常,但Exception规定管理者必须处理异常,即每一个涉及到异常的都必须处理,所以使用RuntimeException只需在需要的部门进行处理即可,使代码更加整洁
(5) 异常处理的原则
本环节处理不了的异常必须抛!