throw和throws概念:
1.throw:该关键字值的是在程序中主动的抛出一个具体异常,因为在异常处理机制来看,异常的产生就是该异常类的实例化,即抛出了异常的对象,所以该对象也可以由throw抛出;
注:使用throw时候,要么通过try…catch自己捕捉异常,要么通过throws抛出异常;
public class ThrowTest {
public static void main(String[] args) {
try{
throwChecked(3);
}catch(Exception e) {
System.out.println(e.getMessage());
}
throwRuntime(-3);
}
//该方法内抛出一个Exception异常对象,必须捕获或抛给调用者
public static void throwChecked(int a) throws Exception {
if(a < 0) {
throw new Exception("a的值应大于0,不符合要求")
}
}
//该方法内抛出一个RuntimeException对象,可以不理会直接交给JVM处理
public static void throwRuntime(int a) {
if(a < 0) {
throw new RuntimeException("a的值应大于0,不符合要求")
}
}
}
2.throws:该关键字一般使用在方法的声明上,表示方法中不处理异常,而交给调用方处理;在Java程序中,如果方法中没有声明处理异常,那就默认由jvm虚拟机处理;
public class ThrowsTest2{
//因为test();会抛出IOException,main方法是调用者
//则需要使用try...catch进行捕获或者抛给JVM
//抛出时要遵循父类声明抛出“大于”子类声明抛出的原则
public static void main(String[] args) throws Exception {
test();
}
public static void test() throws IOException() {
//因为FileInputStream构造器会抛出IOException
//所以需要使用try...catch块进行处理或使用throws抛给调用者
FileInputStream fis = new FileInputStream("a.txt");
}
}