欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

throws与throw

程序员文章站 2022-07-14 10:40:49
...

throws 声明抛出异常

当前方法不知道如何处理这种类型的异常,该异常应该由上一层调用者处理,
main方法也不知道如何处理这种类型的异常,也可以通过throws声明抛出,
交给jvm处理,jvm对异常处理方法:1、打印异常跟踪信息,2、终止程序执行

//从下往上看
public class LearnThrow {
	//main方法也向外抛出了异常,将异常交给jvm处理,即直接停止程序执行
    public static void main(String args[]) throws IOException{
        //getFile()方法向外抛出了输入输出流异常,main方法需要处理该异常
        getFile();
    }
    //定义方法时声明向外抛出异常
    public static void getFile() throws IOException {
    	//所以方法中用FileInputStream类需要有接收、处理FileNotFoundException异常,
        FileInputStream file = new FileInputStream("panda.txt");
    }

}
//FileInputStream源码,构造函数向外抛了文件找不到异常
public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }

throw :手动抛出异常

手动抛出一个异常对象,可以抛出checked异常(编译时异常),也可以抛出Runtime异常(运行时异常)

如果抛出的是checked 异常:
1、要么throw语句要在try{}catch{}块中显示地捕获异常
2、要么所在方法throws声明将异常抛出去,抛给方法调用者

如果抛出的是Runtime异常:
可以用try{}catch{}显示捕获处理异常,也可以直接忽略,默认交给方法调用者

//main方法选择抛给jvm
public static void main(String[] args) throws Exception{
        //方法定义向上抛抛出异常了,main方法还是要处理
        throwChecked(33);
        
        throwRunTime(33);
    }
    
    //也用throws声明往外抛了,此时throws用不到,因为异常对象已经被catch捕获处理了
    public static void throwChecked(int a) throws Exception{
        if (a>0){
            try {
           		 //抛出checked异常,我们用try{}catch{]显示捕获了
                throw new Exception("a值不符合要求。。");
            } catch (Exception e) {
                System.out.println("手动抛出的异常"+e.getMessage());
            }
        }
    }
    
    public static void throwRunTime(int a){
        if(a >0){
        	//手动抛出运行时异常,不做处理,交给调用方法者处理
            throw new RuntimeException("a值不符合要求。。");
        }
    }