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

And*_*ice 3 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?
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 11

问题是:为什么不呢?

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

我建议唯一合理的含义是:

public class Foo {
    static int bar = 21;
    public void foo() {
        static int bar = 42;  // static local
        return bar;
    }
}
Run Code Online (Sandbox Code Playgroud)

相当于:

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

换句话说,(假设的)静态局部变量将等同于具有略微不同的可见性规则的常规静态属性.

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

  • @nixau - 你完全想念它们的事实说明了你的编程风格.一般来说,避免使用静态是很好的风格,当你必须使用它们来使用Singleton设计模式时. (2认同)