Java异常之总结--面试题

一,异常的顶级父类是Throwable类。
其下有两个子类:Error类Exception类
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),运行时异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try。。。catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。
。
二,
try和finally中都有return语句,执行哪一个return?
参考该博客:https://www.cnblogs.com/tian-ci/p/10543073.html

try 中的 return 语句调用的函数先于 finally 中调用的函数执行,也就是说 try 中的 return
语句先执行,finally 语句后执行,但try中的 return 并不是让函数马上返回结果,而是 return
语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回。但此时会出现两种情况: ①
如果finally中也有return,则会直接返回finally中的return结果,并终止程序,函数栈中的return不会被完成 ②
如果finally中没有return,则在执行完finally中的代码之后,会将函数栈中保存的try return的内容返回并终止程序
注意: 1、不管有没有出现异常,finally块中代码都会执行 2、当try和catch中有return时,finally仍然会执行
3、finally是在try中return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值

举个栗子:

public class temp {
	  public static void main(String[] args) {
		     int a = test();
		      System.out.println("a=" +a);
		 
		      
		      
	   }
	  public static int test() {
	      int a = 11;
	      try {
	        a = 1;
	        return a++;
	      } catch (Exception e) {
	        System.out.println("test");
	      } finally {
	        int b = 2; // 【A】
	        ++a;
	    //    System.out.println("a=" +a);
	      }
	      return a + 1;  // 必需,要不然编译错误
	   }
	}

输出为:1
因为在try里时,return的值是1.但它不会马上返回,而是会将a=1的结果保存在函数栈里。
运行完try后,a=2.接着运行finally,a=3.
最后返回到try块,返回已保存的结果1。但实际上函数里的结果已经是3了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值