-1

私はプログラミングが初めてで、テストのために勉強していて、コードの出力を理解していません。最後に 4 が印刷されている理由を理解していただけると幸いです。

Java ビジュアライザーのサイトにコードを投げましたが、理由を除いてすべてを理解しています... System.out.println(myScope.z); 数字の 4 を出力しますか?

どんな助けでも大歓迎です!

public class ScopeTest {
   int z;

public static void main(String[] args){

  ScopeTest myScope = new ScopeTest();
  int z = 6;
  System.out.println(z);
  myScope.doStuff();
  System.out.println(z);
  System.out.println(myScope.z);
}

void doStuff() {
  int z = 5;
  doStuff2();
  System.out.println(z);
}

void doStuff2() {
  z=4;
}
}
4

5 に答える 5

2
  1. ScopeTest myScope = new ScopeTest();0に初期化myScope.z(デフォルト値)
  2. myScope.doStuff();5に設定myScope.zして呼び出しますdoStuff2()
  3. doStuff2()4に設定myScope.zします。

最終結果は 4 です。重要な点は、およびメソッドzで宣言されたローカル変数は、 で宣言されたメンバー変数とはまったく関係がないということです。maindoStuff()zScopeTest

于 2014-10-09T04:48:32.893 に答える
1

一度に 1 行ずつコードをステップ実行することは、コードが何をしているのかを把握するための良い練習になります。これは、紙と鉛筆、およびデバッガーを使用して行う必要があります。それでは、コードを実行順に 1 行ずつ見ていきましょう。コードの各行の後に、その機能について説明します。

ScopeTest myScope = new ScopeTest();

という名前のローカル参照変数を作成し、myScopeそれをオブジェクトに初期化します。

int z = 6;

という名前のローカルint変数を作成し、zそれを に初期化し6ます。

System.out.println(z);

ローカル変数の値を出力しますz

myScope.doStuff();

doStuff()オブジェクトを呼び出しmyScopeます。

int z = 5;

にローカル変数zを作成しdoStuff()、 に初期化し5ます。

doStuff2();

電話doStuff2()

z=4;

という名前のメンバー フィールドzを値に設定します4。そして、制御を に戻しdoStuff()ます。

System.out.println(z);

ローカル変数の値を出力しますz。そして、制御を に戻しmain()ます。

System.out.println(z);

ローカル変数の値を出力しますz。(私たちは今戻ってきたことを忘れないでくださいmain()

System.out.println(myScope.z);

最後に、メンバー フィールド zを出力します。(値が に戻されたことを思い出してくださいdoStuff2()。これzはメンバー変数であるため、この値は記憶されています。)

于 2014-10-09T04:53:21.817 に答える
1

これは流れです:

myScope.doStuff() --> 1. z=5 2. doStuff2() --> z=4

于 2014-10-09T04:54:35.790 に答える
0

main() メソッドで dostuff() を呼び出しています。そこで、クラス変数 z ではなくローカル変数 z である z=5 を初期化しました。そのため、実際にクラス変数 z=4 を変更しているdostuff2()を呼び出しています。そのため、最後の system.out.println(z) で z=4 を出力しています。これが出力を理解するのに役立つことを願っています。

于 2014-10-09T04:50:37.197 に答える
0

最初の行で宣言されたコード zでは、インスタンスメンバー(thiscontext )です。

そのため、doStuff2()呼び出されたときはthis.z4 に設定されます。

//effectively void doStuff2() { this.z=4; }

int zメソッド内で宣言され、にmainある変数。doStuff()local context

zここでは、 in thiscontext の値が最終的に設定された場合にのみ問題になります(これは insidedoStuff2()です)。したがって、

System.out.println(z); >> prints value of local variable z declared in main System.out.println(myScope.z); >> prints the value of instance (of ScopeTest which is myscope here) member z

于 2014-10-09T04:53:03.333 に答える