易截截图软件、单文件、免安装、纯绿色、仅160KB

JAVA finally字句的异常丢失和返回值覆盖解析

JAVA finally字句的异常丢失和返回值覆盖解析
Java虚拟机在每个try语句块和与其相关的catch子句的结尾
处都会“调用”finally子句的子例程。实际上,finally子句在方法内部的表现很象“微型子例程”。finally子句正常结束后-指的是finally子句中最后一条语句正常执行完毕,不包括抛出异常,或执行return、continue、break等情况,隶属于这个finally子句的微型子例程执行“返回”操作。程序在第一次调用微型子例程的地方继续执行后面的语句。
finally“微型子例程”不等同于方法函数的调用,finally子句都是在同一个栈内执行的,微型子例程的“返回”操作也不会涉及到方法退栈,仅仅是使程序计数器pc跳转到同一个方法的一个不同的位置继续执行。
一 异常丢失
 public static void exceptionLost()
{
try
{
try
{
throw new Exception( "exception in try" );
}
finally
{
throw new Exception( "exception in finally" );
}
}
catch( Exception e )
{
System.out.println( e );
}
}
 
exceptionLost()的输出结果是“exception in finally”,而不是try块中抛出的异常,这是JAVA异常机制的一个瑕疵-异常丢失。
在字节码中,throw语句不是原子性操作。在较老的JDK中,exceptionLost()中try块的throw语句分解为几步操作:
1) 把Exception("exception in try")对象引用存储到一个局部变量中
  astore_2  // pop the reference to the thrown exception, store into local variable 2
2) 调用finally微型子程序
3) 把局部变量中的Exception("exception in try")对象引用push到操作数栈顶,然后抛出异常
  aload_2  // push the reference to the thrown exception from local variable 2
  athrow   // throw the exception
如果finally通过break、return、continue,或者抛出异常而退出,那么上面的第3步就不会执行。
在JDK1.6中,通过字节码我们可以看到,finally子句作为一种特殊的catch来实现的,下面是exceptionLost()方法的异常表:
Exception table:
  from   to   target  type
   0     10    10     any


相关文档:

(转)java与flex通信

  (转)java与flex通信
一、准备:
服务端:JDK1.5 (这个不用介绍了吧?)
服务端IDE:eclipse (它的主页)
客户端:FLEX 3 (Adobe® Flex® 3 是用于构建和维护在所有主要浏览器、桌面和操作系统一致地部署的极具表现力的 Web 应用程序的高效率的开放源码框架。)
客户端IDE:Flex Builder 3 ......

java 类编译流程

1.代码的装入
2.代码的校验
3.和代码的执行
体会: dao层 方法名 修改后 调用其的 services 。action 都将被重新 编译。
--- 基本类型使用 :
体会:dao层 基本类型 尽量使用对象类型,以为 基本类型 能自动类型提升 而对象类型 为 null 主动类型转换 会报错:NullPointerException
 小心 类型主动提升 &nb ......

java 中环境变量的设置方法

好久没用java,突一写起来,发现机器上没有设置环境变量,把设置方法总结一下
  1. 修改/etc/profile文件
    如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。
    ·用文本编辑器打开/etc/profile
    ·在pr ......

java打开本地文件

 try {
   Runtime.getRuntime().exec("C:\\xxx.exe");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号