1

CC++中,您可以执行以下操作:

void foo()
{
   static int i = 0;
   ++i;
}

但是,在Java中你会得到一个'Illegal modifier for parameter'错误:

public void foo()
{
    static int i =0;
   ++i;
}

我不是在寻找为什么或为什么不是这是一个好/坏主意的原因。我只是好奇为什么这在C/C++中是合法的,但在Java中不合法。

4

2 回答 2

7

Java 是一种功能较差的语言。除了可以让您编写好的程序的最简单的集合之外,不愿意添加其他功能。这意味着许多晦涩难懂的功能,甚至一些其他语言中可用的非常有用的功能在 Java 中都不可用,因为通常有另一种方法可以做同样的事情,或者更好的方法,或者他们已经决定没有它会更好的功能.

在这种情况下,我怀疑这是因为您可以将字段放在方法之外并做很多相同的事情。

顺便说一句:Java 确实有方法本地命名类,它们很少使用,如果它们是极简的,Java 也不需要。;)

于 2013-01-12T18:01:43.717 回答
2

static函数范围变量在 C++ 中很有用,可以避免“静态初始化顺序失败”。在 Java 中这不是必需的,因为它具有明确指定的静态初始化顺序。

我想最好避免这些变量,因为它会导致令人困惑的行为:

some_code();
static int x = something();
some_code();

wheresomething()仅在第一次调用时调用,而其他指令在您使用此函数时调用。

此外,默认情况下不实现功能。

于 2013-01-12T18:08:41.963 回答