异常:
面向对象过程中比较重要的一部分;
一旦产生异常之后,产生异常的语句和之后的语句将不再执行,并且会抛出异常结束程序;
我们要解决,异常产生之后,继续执行下面的语句;
处理异常:
异常处理的3个关键字:try 、catch、finally,其定义语法如下:
try{
//有可能出现异常的语句
}[catch(异常类型 对象)]{
//异常处理
}catch(异常类型 对象){
//异常处理
}catch(异常类型 对象){
//异常处理
}...][finally{
不管是否出现异常,都统一执行的代码
}]
对于以上操作的组合形式:try..catch、try...catch...finally、try...finally(不建议)
出现异常之后要解决异常,为了对异常进行处理,可以使用异常类中的提供的printStackTrace()方法进行异常信息的输出;
public class test {
public static void main(String[] args) {
System.out.println("1:除法开始");
try {
System.out.println("2:除法计算" + (10 / 0));
} catch (ArithmeticException e) {
e.printStackTrace();
}
System.out.println("3:除法结束");
}
}
异常处理流程:
所有异常都是Throwable的子类;
- Error和Exception的区别?
- Error:指的是JVM错误,即此时程序还没有执行,如果没有执行,用户无法处理;
- Exception:指的是程序运行中产生的异常,用户可以处理
异常处理指的是Exception以及它的子类才可以进行异常处理;
面试题:异常处理流程图如下:
catch里面直接写Exception e 即可,这样就可以捕获所有的异常,但是有两点说明:
- 在编写多个catch捕获异常的时候,捕获范围大的异常一定要放在捕获范围小的异常的后面;也就是Exception要放到最后;
- 虽然Exception可以捕获所有的异常,但是这样不好,因为异常会按照同一种方式进行处理;在严格的项目里面,分开处理异常会更好;
throws关键字:
throws关键字用于方法声明上,指的是当方法中出现异常之后交由被调用处进行处理;
也就是说调用了具有throws声明的方法后,不管操作是否会出现异常,都要利用try...catch进行处理;
主方法上面不要加throws,因为如果程序出错了,希望可以正常的结束程序;
throw关键字:
在程序中可以利用throw手工的抛出一个异常类的实例化对象;放在 try 里面
throw和throws的区别?
- throw:指的是方法中人为的抛出一个异常类对象(这个异常类对象可以是自己实例化的或者是已经存在的)
- throws:在方法的声明上使用,表示此方法在调用时必须处理异常;
异常处理标准格式:
class MyMath {
public static int div(int x, int y) throws Exception {
int result = 0;
System.out.println("1:除法开始");
try {
result = x / y;
} catch (Exception e) {
throw e;
} finally {
System.out.println("3:除法结束");
}
return result;
}
}
public class test {
public static void main(String[] args) {
try {
System.out.println(MyMath.div(10, 0)); //出现异常之后交由被调用处进行处理;
} catch (Exception e) {
e.printStackTrace();
}
}
}
RuntimeException类:
RuntimeException类最大特征:程序在编译的时候不会强制交给用户处理,用户可以根据自己的需要进行处理,如果用户没有处理,将会交给JVM默认处理。RuntimeException子异常类,可以根据用户的选择进行处理;
RuntimeException与Exception类的区别?请列举常见的RuntimeException类?
- Exception是RuntimeException的父类 ;
- 使用Exception定义的异常必须要被处理,而RuntimeException的异常可以根据用户的选择进行处理
- 常见的RuntimeException类异常:ArithmeticException(算数异常)、NullPointerException、ClassCastException。
断言(assert关键字);
Java中的断言指的是程序运行到某行代码的时候一定是预期的结果;
自定义异常:
如果想开发自定义的异常类,可以继承RuntimeException或者Exception类;