throw 和 throws
throw:
- 表示方法内抛出某种异常对象
- 如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错
- 执行到 throw 语句则后面的语句块不再执行
throws:
- 方法的参数后加上 throws 表示这个方法可能抛出某种异常
- 需要由方法的调用者进行异常处理
- 只有一类异常,抛出的时候方法可以不用声明,就是RuntimeException异常。
throws用在方法声明后面,跟的是异常类名,throw用在方法体内,跟的是异常对象名。
throws可以跟多个异常类名,用逗号隔开,throw只能抛出一个异常对象名。
throws表示抛出异常,由该方法的调用者来处理,throw表示抛出异常,由方法体内的语句处理。
throws表示出现异常的一种可能性,并不一定会发生这些异常,throw则是抛出了异常,执行throw则一定抛出了某种异常。
package exception;
/**
* 使用当前类测试异常的抛出
*/
public class Person {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) throws Exception{
if(age <0 || age > 100){
//throw new RuntimeException("年龄不合法");
/**
* 当一个方法中使用throw抛出一个异常时
* 就要在当前方法上使用throws声明该异常的抛出以便通知调用
* 在调用当前方法时要处理异常。
* 只有RuntimeException及其子类在抛出时
* 编译器不要求必须写throws声明,其他异常则必须声明
* 否则编译不通过。
*/
throw new Exception("年龄不合法");
//抛出异常的目的就是为了告诉外界,这里可能会抛出异常
//如果这里用try-catch
//写throw的目的就是为了告诉外界这里可能会有问题
//处理别人抛出的异常时,才用try-catch或throws
/**
* 为什么在以前写流的时候一定要捕获异常,
* 那是因为流的构造方法里就抛出了异常,在创建的时候,我们必须捕获这个
* 异常,处理异常。
*/
}
this.age = age;
}
}
package exception;
/**
* 测试异常的抛出
*/
public class ThrowDemo {
public static void main