在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中不合法。
Java 是一种功能较差的语言。除了可以让您编写好的程序的最简单的集合之外,不愿意添加其他功能。这意味着许多晦涩难懂的功能,甚至一些其他语言中可用的非常有用的功能在 Java 中都不可用,因为通常有另一种方法可以做同样的事情,或者更好的方法,或者他们已经决定没有它会更好的功能.
在这种情况下,我怀疑这是因为您可以将字段放在方法之外并做很多相同的事情。
顺便说一句:Java 确实有方法本地命名类,它们很少使用,如果它们是极简的,Java 也不需要。;)
static
函数范围变量在 C++ 中很有用,可以避免“静态初始化顺序失败”。在 Java 中这不是必需的,因为它具有明确指定的静态初始化顺序。
我想最好避免这些变量,因为它会导致令人困惑的行为:
some_code();
static int x = something();
some_code();
wheresomething()
仅在第一次调用时调用,而其他指令在您使用此函数时调用。
此外,默认情况下不实现功能。