【Java】try-catch-finally执行过程

分有return和没return分析try-catch-finally执行顺序:

  • 无return:

try中没抛出异常:执行try→不执行catch→执行finally
try中抛出异常:执行try(抛出异常语句之后的代码不再执行)→执行catch→执行finally

  • 有return:

try块中有return
①try中没抛出异常:执行try(执行return前)→不执行catch→执行finally→执行try内return→finally之后的return不再执行(因含1条return轨迹)
②try中抛出异常:执行try(抛出异常语句之后的代码不再执行)→执行catch→执行finally→finally之后的return执行(因此时return内未执行)

	public static void main(String[] args) {
		test dx=new test();
		System.out.println(dx.fun());
	}
	public boolean fun() {
		int a[] = new int[5];
		try {
			System.out.println("捕获数组越界异常:" + a[5]);
			return true;
		} catch (ArrayIndexOutOfBoundsException e) { 
			System.out.println("异常11:" + e.getLocalizedMessage());
			
		} finally {
			System.out.println("执行finally");
		}
		return false;
	}

catch块中有return
①try中没抛出异常:执行try→不执行catch→执行finally→finally之后的return执行
②try中抛出异常:执行try→执行catch→执行finally→执行catch内return→finally之后的return不执行

	public static void main(String[] args) {
		test dx=new test();
		System.out.println(dx.fun());
	}
	public boolean fun() {
		int a[] = new int[5];
		try {
			System.out.println("捕获数组越界异常:" + a[4]);
			
		} catch (ArrayIndexOutOfBoundsException e) { 
			System.out.println("异常11:" + e.getLocalizedMessage());
			return true;
		} finally {
			System.out.println("执行finally");
		}
		return false;
	}

try+catch块中有return
①try中没抛出异常:try→finally→try内return
②try中抛出异常:try→catch→finally→catch内return

	public static void main(String[] args) {
		test dx=new test();
		System.out.println(dx.fun());
	}
	public boolean fun() {
		int a[] = new int[5];
		try {
			System.out.println("捕获数组越界异常:" + a[4]);
			return true;
		} catch (ArrayIndexOutOfBoundsException e) {
		
			System.out.println("异常11:" + e.getLocalizedMessage());
			return false;
			
		} finally {
			System.out.println("执行finally");
		}
	}

try+finally块中有return
①try中没抛出异常:try→finally→finally内return(不再执行try内return)
②try中抛出异常:try→catch→finally→finally内return(不再执行try内return)

	public static void main(String[] args) {
		test dx=new test();
		System.out.println(dx.fun());
	}
	@SuppressWarnings("finally")
	public boolean fun() {
		int a[] = new int[5];
		try {
			System.out.println("捕获数组越界异常:" + a[4]);
			return true;
		} catch (ArrayIndexOutOfBoundsException e) { 
			System.out.println("异常11:" + e.getLocalizedMessage());
			
		} finally {
			System.out.println("执行finally");
			return false;
		}
	}

catch+finally块中有return
①try中没抛出异常:try→finally→finally内return
②try中抛出异常:try→catch→finally→finally内return(不再执行catch内return)

	public static void main(String[] args) {
		test dx=new test();
		System.out.println(dx.fun());
	}
	@SuppressWarnings("finally")
	public boolean fun() {
		int a[] = new int[5];
		try {
			System.out.println("捕获数组越界异常:" + a[4]);
			
		} catch (ArrayIndexOutOfBoundsException e) { 
			
			System.out.println("异常11:" + e.getLocalizedMessage());
			return true;
		} finally {
			System.out.println("执行finally");
			return false;
		}
	}

try+catch+finally块中有return
①try中没抛出异常:try→finally→finally内return(不再执行try内return)
②try中抛出异常:try→catch→finally→finally内return(不再执行catch内return)

	public static void main(String[] args) {
		test dx=new test();
		System.out.println(dx.fun());
	}
	@SuppressWarnings("finally")
	public int fun() {
		int a[] = new int[5];
		try {
			System.out.println("捕获数组越界异常:" + a[5]);
			return 1;
		} catch (ArrayIndexOutOfBoundsException e) { 
			
			System.out.println("异常11:" + e.getLocalizedMessage());
			return 2;
		} finally {
			System.out.println("执行finally");
			return 3;
		}
	}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值