日期:2014-05-20  浏览次数:20629 次

blank final
class WithBlankFinal {
  private final Integer i;
  // Without this constructor, I got a compile-
  // time error about initialization:
  public WithBlankFinal(int ii) {
  i = new Integer(ii);
  }
  public Integer geti() {
  // This wouldn't compile:
  if(i == null)
  i = new Integer(47);
  return i;
  }
}

public class A {
  public static void main(String args[]) {
  WithBlankFinal wbf = new WithBlankFinal(10);
  System.out.println(wbf.geti());
  }

这是thinking in Java中关于空白final 的一个习题,书上说必须在使用前初始化.我认为
public Integer geti() {
  // This wouldn't compile:
  if(i == null)
  i = new Integer(47);
  return i;
  }
这几行代码也保证了使用前初始化了啊,我认为这个"使用"应该指的是这里System.out.println(wbf.geti());
所以应该满足语法要求.
但编译不能通过.
请各位帮帮忙!提前道谢了 !!

------解决方案--------------------
在创建对象之前要初始化.你的例子中必须调用方法的时候才能初始化.
类中的final变量可以直接初始化,在构造方法中初始化,或者在初始化块中初始化.