1,编译时/运行时异常的抛出
例如:
import java.io.IOException;
public class ThrowsDemo {
public static void main(String[] args) throws IOException {
//调用抛出编译时异常的方法,这时,要么继续抛出编译时异常,
//要么try…catch处理
// method1();
/*
* 调用抛出运行时异常的方法时,可以不处理(jvm有默认的处理方案),
* 也可以处理跟编译时异常处理的方案一样
* */
method2();
}
//演示编译时异常的抛出
public static void method1() throws IOException{
//故意抛出一个编译时异常
int i=10;
if(i>0){
throw new IOException("故意抛一个编译时异常");
}
System.out.println(i);
}
public static void method2()throws NullPointerException{
//故意抛出一个运行时异常
int[]array=new int[3];
/*
* 什么时候抛空指针异常:
* 当在对象的引用上面,调用了对象的成员,而对象的值刚好为null时,就抛异常
* 此例在31行会抛出空指针异常
* */
array=null;
if(array.length>0){
System.out.println(array.length);
}
System.out.println("hello world");
}
}
2,throws与throw的区别
throws
(1)用在方法声明后,跟的时异常类名
(2)可以跟多个异常类名,用逗号隔开
(3)可以抛出异常,该方法的调用者处理
(4)throws表示出异常的一种可能,并不一定会发生这些异常
throw
(1)用在方法题内,跟的是异常对象名
(2)只能抛出一个异常对象名
(3)表示抛出异常,由方法体的语句块处理
(4)throw则是抛出异常,执行throw则一定抛出了某种异常
3,处理异常的原则
如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws
区别:
(1)后续程序需要继续执行就try
(2)后续程序不需要继续执行就用throws