本节讲异常处理中的throw和throws关键字
throw和throws关键字
1,throws:,如果有些异常你不想在这个方法里面捕获处理,就是在这个方法里面使用try…catch.那就使用throws,然后把这个异常交给调用它的人来处理–>所以通俗一点来说就是我不想处理这个异常。给上一级调用我的人处理把。
2,throw:,如果你想在指定的位置就让它出你想要的异常,就用throw
throws
那么一般什么时候会用到throws?当有检查性异常出现的时候
这里面就有一个检查性异常,如果你不进行异常处理的话它就会编译报错
所以正常情况下你这么做??
就可以解决问题.但是如果我不想在这里这么做。这里好几行代码影响我阅读。这时候就可以用throws来把这个异常交给调用它的人处理,就像这样??
throws关键字用在方法名之后,多个异常用逗号隔开
我把这个异常交给main方法处理。所以main方法同样也要做出选择,是我处理还是在给上一级处理。如果是main方法自己处理,那么进行try…catch就可以。如果继续抛出??
最终变成了这个样子。这样的话这个异常就会交给JVM处理了,但是JVM没法处理啊。怎么办,那就报错中止程序喽。运行后变成下面这样?
到此,throws关键字的作用是什么?
在这个方法里有一个检查性异常。如果你不想捕获它。想交给调用它的上一级处理就使用throws抛出相应的异常。
–>这样用throws有什么好处?
1,如果多个方法会出同一个检查性异常。它的调用者都是同一个人。那就没必要一个一个处理了。统一处理就好。就像下面这样.
public static void main(String[] args) throws FileNotFoundException {
fun();
fun1();
}
public static void fun() throws FileNotFoundException {
FileInputStream fileInputStream = new FileInputStream(new File(""));
}
public static void fun1() throws FileNotFoundException {
FileInputStream fileInputStream = new FileInputStream(new File(""));
}
2,减少代码量提高阅读性。–>同样的功能代码量少大多都是好的。它还可能提升阅读性
throw
什么时候用throw?当你要在指定的位置就让它出异常的时候用throw.
public static void main(String[] args) {
fun();
}
public static void fun() {
//手动抛出一个NullPointerException异常
throw new NullPointerException("出了个异常");
}
运行结果如下。
throw用在方法中.而且一次只能丢一个异常。
在看以下代码
public static void main(String[] args) {
fun(1,0);
}
public static void fun(int num1,int num2) {
if(num2==0){
throw new ArithmeticException("除数不能为0");
}else {
System.out.println(num1/num2);
}
}
上一节我对这个1/0的异常用了捕获处理。这次这边用throw来处理.来告诉调用者你出错了。
当你要在指定的位置就让它出异常的时候用throw.
这样的想法什么时候会有,就是你要告诉调用者如果做了违背你使用方法的时候给它出一个异常来告诉调用者这么用错了。
throw倾向于调用者。它并不是说把这个异常处理了。而且要告诉调用者不能这么做。不然会出异常。
throw和throws的区别
到这应该就能说出一点它们的区别了了。
1,使用上的区别.throw用在方法体中。且一次只能抛一个.throws用在方法名后面。一次能抛出多个
2,使用目的不同。throw多用在告诫调用者不能这么做。throws是把这个方法会出的异常丢给上一级处理。
总结:
1,throws是什么?
异常处理的一种方式,如果不想在这个方法捕获异常,那就throws给上一级来处理
2,throws怎么用?一般什么时候用?
写在方法名后面,可以一次抛出多个异常。一般用在检查性异常上
3,throw是什么?
也是一种异常处理方法。如果要在指定的地方主动让它出异常,就用throw.
4,throw怎么用?一般什么时候用?
throw写在方法体中.一次只能抛出一个异常。一般用在要告诫调用者这么用会出异常的时候。throw一下
5,throws和throw的区别?
使用上的区别和使用目的的区别。根据这两个方向来说能让你更好的理解它们的区别