当前位置: 代码迷 >> J2SE >> 关于java错误方面的提问
  详细解决方案

关于java错误方面的提问

热度:75   发布时间:2016-04-24 01:27:40.0
关于java异常方面的提问!
public classTest {

  public static void main(String[] args) {
  System.out.println(newTest().test());
  }
  static int test()
  {
  int x = 1;
  try
  {
  return x;
  }
  finally
  {
  ++x;
  }
  }
}
为什么执行结果是1呢,finally执行了没有,程序执行到哪里结束的???
请高手告诉我执行详细过程!!!谢谢了!!!
 

------解决方案--------------------
探讨
引用:
public classTest {

public static void main(String[] args) {
System.out.println(newTest().test());
}
static int test()
{
int x = 1;
try
{
return x;
}
finally
{
……

++ 执行了,你自……

------解决方案--------------------
Java code
//finally肯定是执行的public class Test {      public static void main(String[] args){          System.out.println(new Test().test());      }      Integer test(){          Integer x = new Integer(1);          try{return x;}//如果是基本类型,就是return 1;待命,等finally执行完,在接着//return回去,如果是对象,return的是一个地址引用,然后用print的时候调用了对象的toString方法。所以结果是2.          finally{x.setInt(2);}//如果这里直接用x = new Integer(2);打印出的结果还是1,因为这个x地址已经变了,不影响上个地址int i的结果,所以调用toString时打印的是上个i的值。      }}class Integer{    int i;    Integer(int i){        this.i = i;    }    public void setInt(int j) {        this.i = j;    }    public String toString(){        return i+"";    }}//看完这个或许对你有帮助
------解决方案--------------------
会从上而下,按照编译顺序,先执行return,再执行finally
------解决方案--------------------
try-catch-finally语句块里面finally语句块无论如何是会执行的,程序在首次进入try语句块的return的时候,因为后面有finally的语句块,所以先把把x=1的值保存到缓冲区里了,然后再执行finally语句块里的自增,而后程序就直接将缓冲区里的值返回,所以输出的结果就是1咯。
  相关解决方案