throws与throw

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值不符合要求。。");
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值