目录
异常体系
当程序出现错误时,能够最大化的减少损失的一种保护手段
- Error(栈溢出):Error类描述Java运行时内部错误与资源耗尽错误,应用程序不抛出此类异常,这种内部错误一旦出现,除了告知用户,并且使程序安全终止。
- RuntimeException(运行时异常):由于程序错误导致的异常
- IOException:程序本身没有问题,但由于出现I/O问题导致的异常
非受查异常
继承于Error与RuntmeException类的所有异常子类称为非受查异常(不强制用户进行异常处理)
受查异常
Exception以及IOException子类属于受查异常(强制用户进行异常处理)
异常处理格式
为了保证程序出现异常后也能正常执行下去,需要进行异常处理
语法:
try{
//有可能出现异常的语句
}[catch(异常类 对象).....]{
//出现异常后的解决方案
}[finally]{
//异常出口,无论是否产生异常,都会执行finally代码块
//即便try/catch中存在return语句,也会在return之前执行finally代码块
}
搭配方式:
- try ... catch ..
- try ... finally..
- try ... catch ... finally ..
Throws
用在方法上,明确表示此方法可能会产生异常,并不处理,返回给调用方法处理(JVM)
public class Test{
public static void main(String[] args) throws Exception{
System.out.println(calculate(10, 0));
}
public static int calculate(int x,int y){
return x/y;
}
}
Throw
用在方法中,异常对象由用户产生,一般与自定义异常类搭配使用
面试题:
请解释Exception与RuntimeException的区别,并列举出几个常见的RuntimeException
- 从关系来讲,Exception是RuntimeException的父类
- Exception是受查异常,强制用户进行异常处理,受查异常在编译的时候就会报错。
- RuntimeException是非受查异常,不强制用户进行异常处理,是在运行时报错
常见的RuntimeException
- 空指针异常
- 类型转换异常
- 数值转换异常
- 除0异常