throws
关键字抛出该异常:
eg:
这个时候我们发现IDE
报错了,提示我们这里有异常要处理,但是如果我们不想处理,就可以这样:
可以发现test
方法内部没有报错了,但是调用test
方法的地方报错了。是什么原因呢?
抛出异常,就像我们平常所说的“甩锅”,总有一个人要背锅,在Java
中也一样异常最终总是要被处理或者被捕获的,所以我们如果在方法的括号后面抛出一个异常,那么该方法的调用者是必须要捕获这个异常或者将这个异常继续抛出的。
所以上面的错误就会有两种解决办法。
第一种:捕获异常:
第二种:把“锅”甩给Java
虚拟机:
throw 关键字
throw关键字的作用是:主动抛出异常;
首先我们来看系统自动抛出异常:
public static void main(String[] args) {
int a = 10;
int b = 0;
System.out.println(a/b);
}
运行这段代码系统会自动抛出,java.lang.ArithmeticException
异常。
这段程序使用throw
关键字也可以实现:
public static void main(String[] args) {
int a = 10;
int b = 0;
if(b == 0){
throw new ArithmeticException("/ by zero");
}
System.out.println(a/b);
}
结果:
throw
是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常。
注意:使用throw
关键字主动抛出检测性异常的时候,在方法名上必须使用throws
表明调用这个方法可能存在要抛出的异常。
举个例子:
ArithmeticException
属于运行时异常,是在运行时检测的,所以上述代码编译是能通过的,而FileNotFoundException
是属于检测性异常,是在编译之前就需要处理的,所以第二段程序要加上throws
才能通过编译。