私有常量是否有用,这不是静态的?

时间:2010-10-14 02:09:37

标签: language-agnostic oop static const access-modifiers

有没有理由拥有私有常量,这不是静态的?是否有任何情况需要非静态私有const?如果常量默认为静态会不会有意义?

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

3 个答案:

答案 0 :(得分:1)

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

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

此外,您可以将字段和变量设置为final,以防止意外重新分配它们(并且编译器和运行时也可以使用此信息进行性能优化)。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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