1
public class Document1 {
   public static void main(String[] args) {
     String i = "A";
     eg();
   }

   public static void eg(){
      System.out.println("    " + i);
   }
}

これが機能しない理由がわかりません。

4

8 に答える 8

4

範囲

以下のメソッドでコンパイラ エラーが発生します。

 public static void eg(){
      System.out.println("    " + i);
   }

i メインメソッドへのローカル変数であるためです。他の方法ではアクセスできません。

できることは、その変数を必要な場所に渡すことです。

 public static void main(String[] args) {
     String i = "A";
     eg(i);
   }

   public static void eg(String param){
      System.out.println("    " + param);
   }
于 2013-10-14T12:50:34.683 に答える
2

iメインスコープにのみ存在するため。このように、関数i内に渡す必要があります。egeg(String param)

于 2013-10-14T12:54:06.337 に答える
1

iメソッドに引数として渡す必要がありますeg().

あなたのコードでiは、メインメソッドのローカル変数です。したがって、eg()メソッドからアクセスすることはできません。

試す:

public static void main(String[] args) {
     String i = "A";
     eg(i);
   }
于 2013-10-14T12:50:24.613 に答える
1

これは の問題として知られていscopeます。scope変数が表示されるコードの領域です。例えば:

for(int x = 0; x < 10; x++)
{
     // x can only be used inside this loop.
}

もう 1 つの例は、メソッド内でローカル変数を宣言する場合です。

private void doSomething()
{
     String value = "this can only be used inside doSomething()";
}

これは、概念を説明する非常に役立つリンクです。

問題については、メソッド内で変数を宣言しただけです。パラメータ化されたメソッドにする必要があります。

public void eg(String i)
{
    // Your code as normal.
}
于 2013-10-14T12:55:13.220 に答える
0

eg()メソッドは変数を認識していないためですimain()メソッドのみの範囲内です。メソッドに渡すかeg()、インスタンス変数 (この場合は静的変数) にする必要があります。

public static void main(String[] args) {
   String i = "A";
   eg(i);
}

public static void eg(String i){
   System.out.println("    " + i);
}
于 2013-10-14T12:50:39.687 に答える
0

のスコープで宣言されているためString i、関数からアクセスできません。メイン関数の上に置くことで、グローバルスコープで宣言することができます。または、次のような関数にパラメーターとして渡します。eg()mainiString i

public static void eg(String i){

関数呼び出しを次のように変更します。

eg(i);
于 2013-10-14T12:51:37.017 に答える
0

それは範囲の問題です。関数 eg() は、変数iがそのビュー内にないため、変数iを「見る」ことができません。ただし、次のようにした場合:

public class Document1 {
    String i = "A";

    public static void main(String[] args) {

        eg();
    }

    public static void eg(){
        System.out.println("    " + i);
    }
}

次に、変数のスコープがメイン メソッドだけでなく、クラス ファイル全体であるため、機能します。

于 2013-10-14T12:52:12.183 に答える
0

それはすべて、変数のスコープに関係しています。「スコープ」とは、変数にアクセスできる場所を意味します。

あなたのコードでiは、それが宣言されているメソッド内でのみスコープを持つ「ローカル変数」です(実際には、宣言された後のみ)。そのため、他の方法ではそれを「見る」ことができません。

メソッドへのパラメーターもローカル変数と見なされます。

次のレベルはインスタンス変数で、そのスコープはすべてのメソッドですが、インスタンスのコンテキスト内のみです。各インスタンスは独自のコピーを取得します。

その後、スコープがすべてのインスタンスである静的変数を取得します。定義されているクラスごとに 1 つのコピーしかありません。


コードを「修正」するには、次のことができます。

  • 変数をパラメータとしてeg()メソッドに渡します
  • staticメソッドの外で宣言される変数を作成する
  • メソッドは静的であるため、インスタンス変数は役に立ちませんが、メソッドをインスタンスメソッド(非静的)にしてクラスのインスタンスを作成すると機能します
于 2013-10-14T12:58:14.390 に答える