代码一般都会出现异常,为了保证程序在出现异常之后可以正常执行完毕,就需要进行异常处理
先给大家来一张异常体系结构图如下
先来制造一个异常:
public class TestDemo2 {
public static void main(String[] args) {
System.out.println("1.计算开始前");
System.out.println("2.进行数学计算:"+10/0);
System.out.println("3.计算结束后");
}
}
0不能被除所以结果如下,出现异常,但是异常之前的语句可以正常执行,产生异常之后直接结束程序,为了保证出现异常之后继续执行,就需要异常处理
那怎么处理异常呢,请往下看:
public class TestDemo2 {
public static void main(String[] args) {
System.out.println("1.计算开始前");
try {
System.out.println("2.进行数学计算:" + 10 / 0);
}catch(ArithmeticException e){
System.out.println("异常已经被处理");
}
System.out.println("3.计算结束后");
}
}
这样异常就被处理了。
注:java.lang.ArithmeticException这个小玩意是在异常信息栈
throws关键字和throw关键字
throws:表示如果出现异常后不希望进行处理,就是用throws抛出。
throw:表示人为进行异常的抛出,之前所有异常类的对象都是由JVM自动进行实例化操作的,如果希望用户手动抛出异常就用throw。
主方法抛出异常
public class TestDemo3 {
public static void main(String[] args)throws Exception {
System.out.println(calculate(10,0));
}
public static int calculate(int x,int y)throws Exception{
return x/y;
}
}
这时主方法将异常继续向上抛,交给JVM进行异常的处理,也就是采用默认的方式,输出异常信息,而后结束程序执行
上面用了throws现在试试throw手动抛出
public static void main(String[] args) {
try{
throw new Exception("抛个异常玩玩");
}catch(Exception e){
e.printStackTrace();
}
}
}
最后给大家分享一道面试题:请解释throws和throw的区别
1丶throw用于方法内部,主要表示手工抛出异常(这个对象可以是自己实例化的,也可以是已经存在的)。
2丶throws主要在方法声明上使用,明确告诉用户本方法可能产生的异常,同时该方法可能不处理此异常。