在 C 和 C ++ 中,你可以这样做:
void foo()
{
static int i = 0;
++i;
}
但是,在 Java 中,您收到'Illegal modifier for parameter'
错误:
public void foo()
{
static int i =0;
++i;
}
我不是在寻找原因,为什么或为什么不这是一个好/坏的主意。我只是好奇为什么这在 C / C ++ 中是合法的,而不是 Java 。
答案 0 :(得分:7)
Java是一种功能不佳的语言。它不愿意添加除最简单集之外的功能,这将允许您编写好的程序。这意味着许多不起眼的功能,甚至一些非常有用的功能在其他语言中都不可用于Java,因为通常有另一种方法可以做同样的事情,或者更好的方式,或者他们已经确定它是一种功能,如果没有它你会更好
在这种情况下,我怀疑是因为你可以将字段放在方法之外并做同样的事情。
BTW:Java确实有方法本地命名的类,很少使用它们,如果它们是极简主义的,Java并不真正需要它们。 ;)答案 1 :(得分:2)
static
函数作用域变量在C ++中很有用,可以避免“静态初始化顺序失败”。在Java中没有必要,因为它具有良好指定的静态初始化顺序。
我认为避免这些变量是好的,因为它会导致令人困惑的行为:
some_code();
static int x = something();
some_code();
其中something()
仅在第一次调用时被调用,而其他指令在您使用此函数时随时调用。
此外,默认情况下不会实现功能。