java 异常链相关实现

package com.imooc.test;

public class TryCatchTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		TryCatchTest tct = new TryCatchTest();
//		int result = tct.test();
//		System.out.println("test()方法执行完毕 返回" + result);
//		int result2 = tct.test2();
//		System.out.println("test2()执行完毕");
		int result = tct.test3();
		System.out.println(" test3()执行完毕 result值为 " + result);
	}
	/**
	 * divider除数
	 * result结果
	 * try_catch 捕获while循环
	 * divider-- result=result+100/dovider
	 * 捕获异常 打印输出抛出异常 返回-1 
	 * 否则 返回result
	 */
	
	public int test(){
		int divider = 10;
		int result = 100;
		try{
			while(divider > -1){
				divider--;
				result = result + 100/divider;
			}
			return result;
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("循环抛出异常");
			return  -1;
		}
	}
	/**
	 * divider除数
	 * result结果
	 * try_catch 捕获while循环
	 * divider-- result=result+100/dovider
	 * 捕获异常 打印输出抛出异常 返回-1 result=999
	 * 否则 返回result
	 */
	public int test2(){
		int divider = 10;
		int result = 100;
		try{
			while(divider > -1){
				divider--;
				result = result + 100/divider;
			}
			return result;
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("循环抛出异常");
			return result = 999;
		}finally{
			System.out.println("这是finally!!!");
			System.out.println("Result语句是"+result);
		}
		//System.out.println("这部分能输出吗");
	}
	
	
	public int test3(){
		int divider = 10;
		int result = 100;
		try{
			while(divider > -1){
				divider--;
				result = result + 100/divider;
			}
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("循环抛出异常");
		}finally{
			System.out.println("finally执行");
			System.out.println("Result结果为�"+result);
		}
		System.out.println("test3!执行完finally");
		return 1111;
	}
}
package com.imooc.test;

public class DrunkException extends Exception {

	public DrunkException(){
		
	}
	
	public DrunkException(String message){
		super(message);
	}
}
package com.imooc.test;

public class ChainTest {

	/**
	 * test1():抛出喝大了异常
	 * test2():调用test1() 捕获喝大了异常 包装成运行时异常 继续抛出
	 * main方法调用test2()尝试捕获test2()方法抛出的异常
	 */
	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;
			
			//方法二 异常链的写法
//			RuntimeException newExc = 
//					new RuntimeException("司机一滴酒 亲人两行泪");
//				newExc.initCause(e);
//			//initCause()追溯原始异常发生的位置
//				throw newExc;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/idiot2B/article/details/87295052
今日推荐