为什么java中的静态方法只接受其方法中的final或非final变量,而不是静态?

时间:2010-09-15 12:04:30

标签: java android

为什么java中的静态方法只接受其方法中的final或非final变量,而不是静态?

例如,我有以下方法:

public static void myfunc(int somethig)
{                                      
  int a=10;                            
  final int b=20;                      
  static int c=30;   //gives Error why?
}

5 个答案:

答案 0 :(得分:11)

  

问题是:为什么不呢?

考虑一下:静态局部变量意味着什么?

我建议唯一的明智的意思就是:

public class Foo {
    static int bar = 21;
    public void foo() {
        static int bar = 42;  // static local
        return bar;
    }
}

相当于:

public class Foo {
    static int bar = 21;
    private static foo$bar = 42;  // equivalent to static local
    public void foo() {
        return bar;
    }
}

换句话说,(假设的)静态本地化将等同于具有略微不同的可见性规则的常规静态属性。

Java语言设计人员可能会考虑这一点,并认为静态本地人添加的实际价值很少,以至于他们不值得包含在语言中。 (当然,这就是我投票的方式。)

答案 1 :(得分:3)

在Java中(在面向对象编程中),对象携带状态。方法应该通过对象属性共享状态,而不是通过静态局部变量。

答案 2 :(得分:2)

您不能拥有静态局部变量。它没有多大意义。

但是你的班级可以有一个静态字段。


资源:

答案 3 :(得分:1)

您不能拥有静态变量。哪有这回事。您可以将类变量设置为静态。

答案 4 :(得分:-1)

由于java中的每个函数都必须在一个类中,因此可以通过声明类中的字段来获得相同的效果。这是最简单的方法,而且java语言设计者非常保守。他们永远不会添加这样的功能,当有一个更明显,更简单的方法来做同样的事情。

编辑:我认为哲学函数不是java中的第一类。他们不应该存储数据。类是,而且确实如此。