1.定义:字面意思,不同于常规,也就是说,某段代码可能不正常,会出现问
题;
2.异常通常分为三级结构,第一级为Throwable,第二级为Error和Exception
第三级为Error下面对应的子类,以及Exception下面对应的子类;通常我们
只研究Exception下面的子类;
3.Exception分类:
a) RuntimeException(运行时异常、UnCheckedException)):
此种异常在编译前不检查异常,程序中可以选择捕获处理,也可以不处理;
b) 非运行时异常(CheckedException):
此种异常理论上是必须进行处理的异常,如果不处理,程序就不能编译通过;
4.参考:常用的运行时异常与非运行时异常
运行时异常:
非运行时异常:
5.异常处理的几种方式:
a) try...catch...finally 来处理异常
try{ //可能出现异常的代码 //不会出现异常的代码(如果发生异常,则这部分代码不会被执行) }catch(Exception ex){ //如何处理异常 }finally{ //必须执行的代码 }
b) 在方法名后使用throws 异常 的方式来系统自己处理异常;
这种处理异常需要考虑一个问题,就是需要处理的异常是检查性异常,还是
非检查性异常,如果是检查性异常,则必须使用try...catch进行处理,否则
编译不会通过,如果是非检查性异常,则可以选择性的使用try...catch进行
处理,如果不处理,抛到main方法时,JVM会自行处理异常
c) throw 异常 此方法手动抛出异常,也需要考虑到两种情况,但是一般我们都会
将此方法和try...catch一起使用;
检查性异常: 必须使用try...catch进行处理,否则编译不会通过
非检查性异常:可以选择性的使用try...catch进行处理,如果不处理,
抛到main方法时,JVM会自行处理异常
6.自定义异常
可以继承Exception也可以继承Throwable
ep:
class MyException extends Exception{ public MyException(){} public MyException(String message){ super(message); } }
完整代码:
package com.ahuiby.test; class MyException extends Exception{ public MyException(){} public MyException(String message){ super(message); } } public class Test { public static void main(String[] args) { int age=250; try{ if(age>150||age<0){ throw new MyException("年龄越界异常"); } }catch(MyException me){ me.printStackTrace(); } } }