- 什么是异常?
- 异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
- Java中异常的存在形式?
- 异常在java中以类的形式存在,每一个异常类都可以创建异常对象
- 异常的继承结构图
- 编译时异常和运行时异常,都是发生在运行阶段,编译阶段异常不会发生,编译时异常因为什么而得名?
- 因为编译时异常需要在编译阶段预先处理,如果不处理编译器报错,因此而得名,所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象,因为异常的发生就是new异常对象
- 编译时异常一般发生的概率较高:出门可能会下雨,所以要带一把伞不然会发生生病异常
- 运行时异常一般发生的概率较低:出门可能被石头砸到,要带个头盔
- 编译时异常又被称为受检异常或受控异常。运行时异常又被称为未受检异常或非受控异常。
- Java语言中对异常的处理有两种方式:
- 第一种方式:在方法声明的位置上,使用throws关键字(异常上抛)
- 第二种方式:使用try-catch进行异常的捕捉(异常捕捉)
- 注意:异常发生之后,如果一直上抛,最后抛给了main方法,main方法继续向上抛,抛给了调用者JVM,JVM知道这个异常发生,只有一个结果,终止Java程序的执行
- 如果对异常进行处理,后面代码还会继续执行 如果把异常直接抛出,后面代码将不会在继续执行,如果写在try语句块中,出现异常,异常后面的代码不会执行
- throw是手动抛出一个异常,throws是方法抛出一个异常
- 在方法上抛出一个异常时,只有在子类执行失败从而创建出一个异常对象才会执行,或者在方法中直接抛出一个异常对象。如果执行正确则不会产生异常对象,从而也不会抛出异常
- 深入try...catch
- catch后面的小括号的类型可以是具体的异常类型,也可以是异常类型的父类型
- catch写多个的时候,建议catch 的时候,精确的一个一个处理,这样有利于程序的调试
- catch可以写多个,但是顺序必须按照从上到下,从小到大排列原则
- JDK8的新特性,可以将多个异常通过逻辑或写在一个catch中
- 异常对象有两个非常重要的方法:
- 获取异常简单的描述信息
- String msg=exception.getMessage();
- 打印异常追踪的堆栈信息
- exception.printStackTrace();
- 获取异常简单的描述信息
- 关于try中的finally子句
- 在finally子句中的代码是最后执行的,并且是一定执行的,即使try语句中的代码出现了异常。
- finally子句必须和try一起出现,不能单独编写
- finally子句通常使用在那些情况
- 通常在finally语句块中完成资源的释放/关闭
- 因为finally中的代码比较有保障
- 即使try语句块中的代码出现异常,finally中的代码也会正常执行
- try和finally,没有catch可以吗?
- try不能单独使用
- try和finally可以联合使用
- 有三种情况:try-catch、try-catch-finally、try-finally
- 当java程序在执行try块、catch块时如果遇到了return或者throw时,这两个语句都会导致该方法立即结束,但是系统在执行这两个语句时并不会结束该方法,而是去寻找该异常处理流中是否包含了finally语句块,如果没有finally块,则程序会立即执行return或者throw语句,方法终止。如果有finally语句块,系统会开始立即执行finally语句块,只有当finally语句块中的代码被执行完了之后,系统才会回来再次执行try块或者catch块中的return或throw语句,但是如果finally块中也有return或者throw这样能是方法结束的语句,则finally块就会立即结束该方法,系统将不会跳回去执行try块或者catch中的任何语句。
- 异常也可以自己编写,编译时异常要继承Exception(如果事件发生概率较高),运行时异常要继承RuntimeException(如果事件发生概率较低)
- 在进行方法的覆盖时,访问权限修饰符只能更高,抛出异常只能更少
- 类在强制转换过程中,如果是类转换成接口类型,那么类和接口之间不需要存在继承关系,也可以转换。
标签:语句,动力,day07,try,finally,catch,执行,异常,节点 From: https://www.cnblogs.com/wei-xin-yuan/p/16848086.html