-1

我在看Java源码,遇到两个小问题。我不知道Sun为什么要写这样的代码,这里有问题(JDK版本:1.6):

问题一:

java.util.concurrent.PriorityBlockingQueue#offer(E e):


public boolean offer(E e) {
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
        boolean ok = q.offer(e);
        assert ok;
        notEmpty.signal();
        return true;
    } finally {
        lock.unlock();
    }
}

为什么要在方法块中定义局部最终ReentrantLock变量,为什么不直接使用全局变量lock

问题2:

此方法java.text.NumberFormat#getInstance(Locale desiredLocale, int choice):创建一个DecimalFormat对象,但返回类型为NumberFormat. 为什么不将返回类型设为DecimalFormat

4

2 回答 2

3

对于第一个问题:

  1. 那不是全局变量,那是成员变量。我确实建议您查看范围规则以更好地了解词汇表。
  2. 程序员做出此决定的原因有多种可能性。最直接地,我想起了 Android SDK,当您使用本地范围的变量时,性能会有轻微的提升。也可能是程序员认为final在这种情况下使用将是一个更好的选择(更多关于为什么发生这种情况。)。

对于第二个问题:

它在大多数情况下返回 a DecimalFormat,但该方法有可能(您可以在此处查看源代码getInstance返回NumberFormat.

于 2013-01-05T06:24:14.923 回答
1
  1. 不打算修改的局部范围变量。
  2. NumberFormat是一个抽象类,所以它被视为接口。
于 2013-01-05T08:50:02.433 回答