1

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では合法ではない理由に興味があります。

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 に答える