异常
运行时异常
定义:RuntimeException及其子类都被称为运行时异常。
特点:Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既"没有通过throws声明抛出它",也"没有用try-catch语句捕获它",还是会编译通过。例如,除数为零时产生的ArithmeticException异常,数组越界时产生的IndexOutOfBoundsException异常,fail-fail机制产生的ConcurrentModificationException异常等,都属于运行时异常。
常见类型异常
NullpointerExceptiony异常
在试图调用null的函数或调用方法传递进来的值为null时,将会产生此类异常
ClassCastException异常
是类型转换错误,通常进行强制类型转换时候出现错误 。 强制转换类型的前提是父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候就会产生java.lang.ClasssCastException异常。
ArrayIndexOutOfBoundsException 异常
一种非常常见的异常,表示数组下标越界
NumberFormatException 异常
数字转换异常, 在把一个表示数字的字符串转换成数字类型的时候可能报这个异常原因是作为参数的字符串不是由数字组成的。
其他常见异常类
-
RuntimeException java.lang包中多异常的基类
-
ArithmeticException 算术错误
-
IllegalArgumetException 方法收到非法参数
-
ClassNotFoundException 不能加载请求的类
-
IOExcetion I/O异常
-
FileNotFoundExcePtion 不能找到文件
-
IllegalAccessException 对类的访问被拒绝
-
NoSuchMethodException 请求方法不存在
自定义异常
Throwable是所有异常的父类 ,Exception是异常的父类,异常分为两大类,受检异常和运行时异常,受检异常就是在调用某个抛出受检异常方法时,调用方必须去处理掉该异常或手动向上抛出,否则编译不通过,运行时异常就是不会被编译器所检查,当程序运行到特定条件时,才会抛出异常。
- 自定义异常需要继承Exception类
- 在方法中需要通过throw手动抛出异常对象
- 若是在当前抛出异常的方法中处理异常,可以用try-catch语句捕获并处理;若不是,在方法的声明处通过关键字throws指明要抛出给方法调用的异常。
- 在出现异常方法的调用中捕获并处理异常。
public class ExampleException extend Exception{
public ExampleException(){
super();
}
public ExampleException(String msg){
super(msg);
}
}
---------------------
throw new ExampleException("这是个测试异常信息!");
捕获异常
捕获异常通常使用try-catch-finally代码块,程序会运行try代码块里面的代码,若捕获到异常则进行catch中代码中的处理。
try{
int a = 5, b = 0;
a/b;
} catch (ArithmeticException e){
throw new ExampleException("除0异常");
}