Java之异常

    异常在很多语言中都有,使用方法也是大同小异,基本的都是:

try{
    //危险动作
}catch(Exception ex){
    //尝试处理
}

因此卸载catch中的程序必定与所抛出的异常有关。注意异常Exception类型的对象可以是任何它的子类的实例。

还有一种情况是自己编写异常,抛出异常的时候必须声明异常。类似函数调用的过程。

1、有风险会抛出异常的程序代码

public void takeRisk() throws BadException {
    if (abandonAllHope){
        throw new BadException();
    }
}

2、方法调用

Public void crossFigers()
{
    try{
         anObject.takeRisk();
    }catch(BadExcetion ex){
     system.out.println("throw error!")
     ex.printStackTrace();
    }
}

那异常到底是是如何进行控制的呢?

try{
    Foo f = x.doRiskyThing();
    int b = f.getNum();
}catch(Exception ex){
    system.out.println("failed");
}

system.out.println("we made it!");

try模块会先执行如果执行成功的话,然后会跳过catch模块下面的部分。如果调用doRiskyThing()抛出异常,会跳过try中其他部分,直接运行catch块,然后继续下去。

那try-catch中还有一种finally的情况,就是无论是否成功,finally都会要执行的部分。例如想烹饪,就需要先打开炉子,如果烹饪失败了,需要把炉子关掉,如果烹饪成功了也需要把炉子关掉。因此将关掉炉子的部分无需既放在try中又放在catch中,将其公共流程统一放在finally中。

try{
    trurnOverOn();
    x.bake()
}catch(BakingException ex){
    ex.printStackTrace();
}finally{
    trurnOverOff();
}
  1. 如果try失败了,抛出异常,流程会转移到catch中,catch执行完了会到finally中
  2. 如果try成功了,流程会跳过catch并移动到finally中
  3. 如果try或者catch有return指令,finally还是会执行,流程会跳到finally中执行,然后再会到return指令

示例:

public class TestExceptions {
    public static void main(String [] args) {
    	String test = "no";
    	try {
    		System.out.println("strart try");
            //输入syso 按下alt+/快捷键
    		doRisky("test");
    		System.out.println("end try");
    	}catch(ScaryException se) {
    		System.out.println("scary exception");
    	}finally {
    		System.out.println("finally");
    	}
    	System.out.println("end of main");
    }
    
    static void doRisky(String test)throws ScaryException{
    	System.out.println("start risky");
    	if ("yes".equals(test)) {
    		throw new ScaryException();
    	}
    	System.out.println("end tisky");
    	return;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值