0
class Myclass{
    int x; 
    Myclass (int i){
        x = i;
    }
}

それが私の本にあるコードです。このコードが機能するかどうか知りたいですか?

class Myclass{
    int x;
    Myclass (x)
}

私も試すことができました

class Myclass{
    int x;
    Myclass (int x)
}

私の最初の答えに応えて...これはうまくいきますか?

4

4 に答える 4

1

Java では型を明示的に指定する必要があるため、後者のコードは機能しません。(暗黙の型宣言はありません)

于 2013-09-06T00:37:28.343 に答える
0

インスタンス変数と同じ名前のパラメーターまたはローカル変数がある場合があります。はい。その場合、パラメーターまたはローカル変数はインスタンス変数を隠します。このような場合にインスタンス変数を参照するには、次を使用します。

this.x

たとえば、次のパターンがよく見られます。

class MyClass {
    private int x;

    public MyClass(int x) {
        this.x = x;
    }
}

Josh M が指摘しているように、型を省略することはできないことに注意してください。それがあなたの質問の内容である場合、いいえ、そうではないかもしれません。

于 2013-09-06T00:38:35.250 に答える
0

これはコンパイルされます:

class Myclass {
    int x;
    Myclass (int x) {
    }
}

ただし、これを行うとx、コンストラクター (または他のクラス メソッド) 内で明示的に参照できるインスタンス変数 と、コンストラクターに対してthis.xローカルなローカル パラメーター変数の 2 つの変数が同じ名前になりますx。コンストラクターで参照するだけxで、ローカルのものを取得できます。これは、可変シャドウイングと呼ばれます。

ソース コードでこれら 2 つの変数に同じ名前を付けることにした場合でも、コンパイラが生成するコードでは、それらはまったく無関係です。パラメータに y という名前を付けたかもしれません。

これを理解するのに役立つかもしれない実験は、変数に異なる型を与えることです。たとえば、インスタンス変数を abooleanにします。次に、さまざまなことを試してみて、それらがたまたま同じ名前を持つ完全に異なる変数であることを確認できます。

于 2013-09-06T00:45:34.833 に答える
0

@Chris Hayes と @Samuel Edwin Ward の回答に続いて、ここに 1 つのトリックがあります。

class MyClass {
    private int x;

    public MyClass(final int x) {
        this.x = x;
    }
}

修飾子は、変更できないことfinalコンパイラに伝えます。うっかり書いたら x

class MyClass {
    private int x;

    public MyClass(final int x) {
        x = x;  // Oopsie!
    }
}

コンパイラは文句を言います。

于 2013-09-06T00:50:10.273 に答える