throws要放在类的方法后面,可抛出多个异常
throw放在语句里面抛出异常,抛出一个异常
先来看看用throw在语句中抛出异常的用法:
在JVM中,遇到没有声明处理的异常就会中断执行,如下:
int i= 1;
int j = 0;
int res = 0;
res = i/j;//除0错误
System.out.println(res);
上面程序运行到第4句就会中断,因为JVM抛出了异常,但有时候在JVM看来不是错误,比如把一个人的年龄赋值为-100岁。这时候可以人为抛出异常,程序会继续往下执行,同时在控制台打印异常。 int age = 0;
age = -100;
if(age<0)
{
Exception e = new Exception();//创建异常对象
try {
throw e;
} catch (Exception e1) {
e1.printStackTrace();
}//抛出异常
}
System.out.println(age);
在方法后面抛出异常:
在方法后面用throws可抛出多个异常,这些异常只是告诉给编程人员在调用方法时很可能要对异常需要进行捕捉,如果出现了异常,只要把异常处理了就能继续往下执行,如果不进行try catch的话程序就会中断执行。
public static void main(String[] args) {
Impl i=new Impl();
try { //对test方法进行捕捉异常了,程序可继续进行
i.test() ;
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("遭遇异常后后续操作");
}
}
class Impl {
public void test () throws NullPointerException{
Object object=null;
object.toString();//不能toString,产生空指针异常
}
}
上面的代码输出为:
java.lang.NullPointerException
at main.Impl.test(Test2.java:20)
at main.Test2.main(Test2.java:8)
遭遇异常后后续操作
上面的test方法在实际应用中也可能不在后面throws异常,但是如果在调用的时候不捕捉实际中产生的异常的话,程序就会中断,只要处理了产生的异常就可往下执行,不处理就不可往下执行。自创建的异常对象,在现在的版本中强制要把throw e放在try catch里面。