问答详情
源自:1-9 经验总结

思维有些混乱,能否用俗语解释下这篇代码

public class ChainTest {


public static void main(String[] args) {

ChainTest ct=new ChainTest();

try{

ct.test2();

}catch(Exception e){

e.printStackTrace();

}

}

public void test1() throws DrunkException{

throw new DrunkException("开车别喝酒");

}

public void test2(){

try {

test1();

} catch (DrunkException e) {

// TODO Auto-generated catch block

RuntimeException newExc=new RuntimeException(e);

//newExc.initCause(e);

throw newExc;

}

}

}


提问者:慕粉2133533430 2017-05-02 21:06

个回答

  • 1992haoll
    2017-05-02 21:28:53
    已采纳

    test1是抛出一个异常,test2是接收test1的异常并输出运行异常。

  • ZangGaHeung3542202
    2017-05-02 21:29:12

    public class ChainTest {//先看test1的注释,再看test2的,再看main函数
    
    	public static void main(String[] args) { 
    		ChainTest ct=new ChainTest();
    		try{
    			ct.test2();//test2丢出了这个异常,所以由父类捕捉
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    	public void test1() throws DrunkException{//test1我们手动抛出了一个异常,由于使用了throws DrunkException,就给父类捕捉这个异常
    		throw new DrunkException("开车别喝酒");
    	}
    	public void test2(){
    		try {
    			test1();//调用了test1,test1我们手动抛出了一个异常,所以由test2这个父类来捕获这个异常。还有test2应该也要使用throws DrunkException 吧
    		} catch (DrunkException e) {
    		// TODO Auto-generated catch block
    			RuntimeException newExc=new RuntimeException(e);
    		//newExc.initCause(e);
    			throw newExc;
    		}
    	}
    }