Java Finally

Java 中final的代码块不是一定会执行的,   如果遇到了 报错, 但是没有捕捉, 那么不会执行, 如果遇到了System.Exit(0)的话. .    也就不会执行后面的代码了, 这个代码就会终止所有的线程.   除非是调用了

Runtime.getruntime().addshutdownhook(Thread) 那么在System.Exit(0). 执行的时候JVM 会执行  前面注册的hook .


System.Exit(0) 执行的时候 虚拟机退出前要执行两项工作:

1, 执行系统中华所有注册的钩子.

2, 如果程序前面调用了System.RunFinalizerOnExit(true). 那么JVM 会对还没结束的对象调用Finalize 方法.



try

{

 throw new RuntimeException("haha");

}

finally

{


return 0;

}


程序在遇到throw 异常的时候 会先去看看是否有finally 代码, 有的话会先执行finally 代码然后再会根据情况是否接着throw.  如果finally 中没有return 就会接着throw如果已经有return了 就不会再去执行throw



try
{

System.out.println("haha");


}catch(IOException e){

}


这个代码是会报错的, 因为try里面的代码不存在任何语句会抛出IOException , 所以编译会报错, 对于catch Exception 来说, 如果catch 一个 运行时异常没有任何问题. 任何代码都可以, 但是如果try代码块中没有可能抛出一个编译时异常的代码, 然后catch 的时候去捕捉了, 那么就会报错.  捕捉Exception 不会报错

不过C# 中是没有这个问题的,  try{int a=10}catch(IOException ie){} 这样也是可以通过编译的


子类在重写父类方法的时候不能抛出比父类更大的异常, 只能声明抛出比父类抛出的异常的子类.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值