java 程序中try catch / throw / 函数名上throws 具体执行顺序和扔异常捕获异常的概念模型

1. code 如下:

throws:

	public Object aroundMethod(ProceedingJoinPoint pjd) throws Throwable{
		
		Object result = null;
		String methodName = pjd.getSignature().getName();
		Object[] args = pjd.getArgs(); 
		result = pjd.proceed();  //这句出现异常,但是被throws 了(throw 给了调用者,<span style="color:#ff0000;">调用者try catch 住这个异常</span>),所以后面的aaa 句子不执行
		System.out.println("The method "+ methodName +" ends ");//aaa
		return result;
	}

throw:

	public Object aroundMethod(ProceedingJoinPoint pjd){
		
		Object result = null;
		String methodName = pjd.getSignature().getName();
		Object[] args = pjd.getArgs(); 
		
		//执行目标方法
		try {
			System.out.println("The method "+ methodName +" begins with "+ Arrays.asList(args));
			result = pjd.proceed();//这句出异常,则aaa 不执行,直接跳到catch 里
			System.out.println("The method "+ methodName +" ends with "+result);//aaa
		} catch (Throwable e) {
			throw new RuntimeException(e);//如果这句不throw,调用者根本不知道这里发生了异常,还没事一样
						      //这句throw 执行后,(直接throw 给调用着这个异常,<span style="color:#ff0000;">调用者需要try catch 住这个异常</span>),bbb 不执行	
		}
		System.out.println("The method "+ methodName +" ends ");//bbb
		return result;
	}
注意:上面两处提到,(throw / throws 抛给上层异常),调用者try catch 住这个异常,

(1)catch 住,则调用者调用了aroundMethod( ) 这个方法之后,后面的语句还能执行

(2)不catch 住,则调用者拿到这个异常throw 给了JVM,JVM 打印出错误的堆栈信息.
try catch 对于jvm 的关系三点

(1)try catch 只要没人接throw 过来的exception,那么jvm 就接,就打印出红色的堆栈信息。如果有人接,则这个exception,jvm 就不知道了(可以这么理解),这样执行完catch 中的句子,还能执行catch 后面的句子。

(2)try catch,try 里面的句子发生异常,可能是这个句子本身的异常,也可能是这个句子调用了函数,那个函数发生的异常,不管什么,只要这个try 接住了这个throw 过来的异常,那么就可以不给jvm ,就可以不影响程序流的执行。

(3)try 就是自己吃掉这个异常,不给上层调用者了,throws 就是自己不吃掉,让上层去吃掉,等同与下面的 aaa

try 和 throw / throws 关系一点

(1)throw / throws 就是往上层扔异常,就是throw 抛给调用者(调用者不try 吃掉,这个异常就给JVM ,也就是打印红色堆栈信息),

try catch 就是吃掉try 里面句子发生的异常  aaa

try catch / throw / throws 对后面代码的影响

(1)throw / 函数名上throws 均执行不到异常代码后面的语句

(2)try catch ,这个语句块后面的语句照常执行.













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值