私は、インスタンスデータとして扱う変数と、仮パラメータとして扱う変数をJavaがどのように決定するか(私がJavaを個性化しているように聞こえると言い訳します)を理解しようとしています。私はこの混乱が適切なコーディングテクニックの後に避けることができることを知っていますが、私はそれの背後にあるロジックについては興味があります。次の例では:仮パラメータまたはインスタンスデータがあるかどうかJavaがどのように検出しますか?
public Foo{
int a, b, c;
//this assigns the formal parameters' values to the instance data's values
public Foo(int x, int y, int c){
a = x; //makes sense
this.b = y; //makes sense
c = c; //how?
}
//how can you tell which value is being dealt with
public int getBar(int a, int b, int c){
if(b < (b - b))
a += 5;
else
a += a;
b = b;
b += c;
return b;
}
}
コンストラクタ、Foo()
、仮パラメータは、すべてのインスタンスのデータにコピーされています。これは最初の2つの課題ではっきりしていますが、3番目の課題ではいくつか質問があります。 Javaはどのような "c"を使用するかをどのように知っていますか?インスタンスデータを格納するものか、仮パラメータを表すものか? 2番目の関数(あまりにも極端な例であれば申し訳ありません)では、Javaがインスタンスデータを表す変数と仮引数を表す変数をJavaがどのように決定するのか、どのように知っていますか。
ルールは単純です。パラメータとフィールド(インスタンスデータと呼んでいるもの)が同じ名前を持つ場合、その名前の前に 'this 'が付いていない限り、その名前の使用は**パラメータ**を参照します。 –
'c = c'はインスタンス変数に代入されません。 – user2357112