java - 最终如何阻止工作

标签 java

如果finally block 在return statement present in side try block之前执行,那为什么return list未打印null而是打印 [DEV]。

public class Sub {
 List list = new ArrayList();

  public List check(){
    try {
        list.add("DEV");
        return list;
    }finally{
        list = null;    
                System.out.println("Inside finally ["+list+"]");
    }
  }

  public static void main(String[] args) {
    Sub sup = new Sub();

    System.out.println(sup.check());
    System.out.println(sup.list);
  }
}
<小时/>

O/P:

  • 最后在里面[null]
  • [开发]

最佳答案

list引用的值对象在 finally 之前在堆栈上更新语句被执行。 事情是这样的

  • 列表项 return list;try block 更新 list 引用的对象在堆栈上。
  • 另一方面,即使finally block 在 try 之后执行 block ,分配list = null;已完成,但堆栈上的值未更新。它不会改变返回值。
  • 声明System.out.println(sup.check());打印DEV因为它是从 try 返回的值 block ,即在堆栈上更新的 block 。
  • 这里System.out.println(sup.list);您直接指list变量设置为 null使用list = null;finally不更新堆栈上的值的 block 。

关于java - 最终如何阻止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23607893/

相关文章:

java - 无法从外部包访问类

java - Liferay Portlet 首选项

java - 可以使用此代码退出

java - 原子能保证可见性吗? java

Java 和 JNA 为 C 函数传递参数

java - AlertDialog 无法解析或不是字段

java - Spring 启动 : How to setup test data with liquibase in unit test

java - 未处理的异常类型 URISyntaxException

java - 发生异常“org.netbeanSecurity :Illegal attempt to exit early?

java - Eclipse 说无法解析类的静态字段