2010-10-14 37 views
2

是否有任何理由有一个私人常数,这不是静态的?有没有什么情况需要一个非静态的私有常量?如果常量静态默认情况下是否有意义?有没有用于私人常量,这不是静态的?

我使用ActionScript3和一些Java,但我认为这是一个更广泛的面向对象问题。

回答

1

我不知道这是否重要,但在Java中,您需要使局部变量最终能够在内部类中使用它们(因为Java没有真正的关闭,而是复制了捕获的范围,今后必须是不可改变的)

void test(){ 
     final long startTime = System.currentTimeMillis(); // needs to be final 
     new Runnable(){ 
      System.out.println(startTime); 
     }.run(); 
} 

另外,还可以使字段和变量最终为了保护自己免受意外重新分配他们(编译器和运行时也可以将这些信息用于优化性能)。

当然,这些例子都不是关于数学意义上的常量(Java中的最终变量可以根据变量输入分配给计算表达式)。

1

除了访问匿名类中的变量(如Thilo所说的)之外的另一个原因是如果你想要一个对象,你不能改变赋值,但它保持了当前对象的某种状态,因此你不能在班级的多个实例中共享它。

1

C#具有readonly fields的这个概念,即只能在构造函数中分配并且不能在任何其他方法中更改的字段。它们就像一个类的特定实例(在其构造函数之外)的常量,而不是类本身的常量。