一、分类
- 异常Exception:代码级别的问题,可以被捕获并进行相应的处理。
- 错误Error:JVM级别的严重错误,出现Error会让程序进入不可恢复的状态。
-
运行时异常,也叫做非受检异常(unCheckedException),有的运行时异常可以不做处理,比较普遍,所以可以暂不处理。
- NullPointerException 空指针异常
- ArithmeticException 数学运算异常
- ArrayIndexOutOfBoundsException 数组下标越界异常
- ClassCastException 类型转换异常
- NumberFormatException 数字格式不正确异常
- 等等
-
编译时异常,受检异常(CheckedException),必须要在编译前处理的异常。
- SQLException:操作数据库的异常
- IOException:文件操作出现的异常
- FileNotFoundException:文件未找到异常,一般用于IO流
- ClassNotFoundException:类未找到异常
- IllegalArgumentException:参数异常
二、异常处理的方式
两种:
- throws:抛给上级
- try...catch...finally:在本级捕获处理
注意:一般catch(异常)时,如果有多级异常,一般要求子类在前,父类在后。
//这样就报错了
public static void main(String[] args) {
try{
int i = 10/0;
}catch (Exception e){
e.printStackTrace();
}catch (RuntimeException e){
e.printStackTrace();
}
}
三、自定义异常
让自己定义的类去继承Exception或RuntimeException类。
- 继承Exception类的是编译时异常
- 继承RuntimeException类的是运行时异常
定义一个异常:
public class SelfDefinitionException extends Exception{
public SelfDefinitionException(String message) {//构造器
super(message);
}
}
测试:
public class SelfDefinitionExceptionTest {
public static void main(String[] args) {
int i = 0;
if (i == 0){
try {
throw new SelfDefinitionException("该数不能等于0");
} catch (SelfDefinitionException e) {
e.printStackTrace();
}
}
}
}