throws
throws ,就是在方法声明处使用的用来抛出异常的语句,它抛出的异常来源于系统自动生成的异常对象。一个方法必须声明所有可能抛出的检查型异常(java将派生于Error类或RuntimeException类的所有异常称为非检查型异常,所有其他的异常称为检查型异常)(摘自《Java核心技术卷I》)
throw
throw ,手动抛出异常,它抛出的异常是你手动生成的。
为什么要手动生成异常并抛出?
因为,一旦方法抛出了异常,这个方法就不会返回到调用者。也就是说,不必操心建立一个默认的返回值或错误码(摘自《Java核心技术卷I》)。
理解
两者区别非常之大,可以说是没有多少相似性。
throws主要是方法处声明可能抛出的异常,实际上有没有异常未知,但存在抛出异常的风险,因此,方法的调用者需要进行相关异常处理。
throw方法是抛出一个异常,是自己亲手写的明明白白抛出的异常,抛出异常后,除非进行异常捕获,否则该方法后续的代码不再执行,可以理解为抛异常是一种特殊的return。
简单测试理解一下(//表示编译时要求因为“无法访问的语句”而注释掉的语句)
public class Test {
public static void main(String[] args) throws NullPointerException {
String s="";
try {
throw new Exception();
// System.out.println("1");
}
catch (Exception e){
e.printStackTrace();
}
System.out.println("2");
if(s == null){
//抛出异常
throw new NullPointerException();
// System.out.println("3");
}else{
System.out.println(s);
}
System.out.println("4");
}
}