NPE in try-finally语法

时间:2016-03-04 09:37:30

标签: java

以下是我测试一些语法的代码。我想在try-block中返回一个对象并在finally块中执行一些操作。但是当我运行我的代码时,我得到NullPointException。原因是使用了ReentrantLock,但我不知道为什么。

import java.util.concurrent.locks.ReentrantLock;


public class Main {

  ReentrantLock lock;

  public static void main(String[] args) {
    try {
      new Main().run();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  public void run() {
      System.out.println(returnTest().get());
  }

  A returnTest(){
//  lock.lock();
    try {
      return new A();
    } finally {
//  lock.unlock();
    }
  }

}

class A {
  public boolean get() {
    return true;
  }
}

如果我取消注释lock.lock()lock.unlock(),我将获得NullPointException。 为什么呢?

3 个答案:

答案 0 :(得分:4)

因为ReentrantLock lock; 从不实例化/初始化。

在开头初始化它。

ReentrantLock lock = new ReentrantLock();

答案 1 :(得分:0)

您需要初始化 ReentrantLock

的对象

做的:

ReentrantLock lock = new ReentrantLock();

答案 2 :(得分:0)

像这样初始化锁定变量:

 'checking':{
  type:String,
  optional:true,
  label:"Wheelchair Type",
  autoValue:function(){
    if(this.siblingField('type').value != "wheelchair"){
       this.unset();
  }
} 

基本上抛出了NullPointException,因为lock是用null值初始化的,所以这就是你应该初始化的原因。