public class Document1 {
public static void main(String[] args) {
String i = "A";
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
これが機能しない理由がわかりません。
public class Document1 {
public static void main(String[] args) {
String i = "A";
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
これが機能しない理由がわかりません。
以下のメソッドでコンパイラ エラーが発生します。
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);
}
i
メインスコープにのみ存在するため。このように、関数i
内に渡す必要があります。eg
eg(String param)
i
メソッドに引数として渡す必要がありますeg().
あなたのコードでi
は、メインメソッドのローカル変数です。したがって、eg()
メソッドからアクセスすることはできません。
試す:
public static void main(String[] args) {
String i = "A";
eg(i);
}
これは の問題として知られてい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.
}
eg()
メソッドは変数を認識していないためですi
。main()
メソッドのみの範囲内です。メソッドに渡すかeg()
、インスタンス変数 (この場合は静的変数) にする必要があります。
public static void main(String[] args) {
String i = "A";
eg(i);
}
public static void eg(String i){
System.out.println(" " + i);
}
のスコープで宣言されているためString i
、関数からアクセスできません。メイン関数の上に置くことで、グローバルスコープで宣言することができます。または、次のような関数にパラメーターとして渡します。eg()
main
i
String i
public static void eg(String i){
関数呼び出しを次のように変更します。
eg(i);
それは範囲の問題です。関数 eg() は、変数iがそのビュー内にないため、変数iを「見る」ことができません。ただし、次のようにした場合:
public class Document1 {
String i = "A";
public static void main(String[] args) {
eg();
}
public static void eg(){
System.out.println(" " + i);
}
}
次に、変数のスコープがメイン メソッドだけでなく、クラス ファイル全体であるため、機能します。
それはすべて、変数のスコープに関係しています。「スコープ」とは、変数にアクセスできる場所を意味します。
あなたのコードでi
は、それが宣言されているメソッド内でのみスコープを持つ「ローカル変数」です(実際には、宣言された後のみ)。そのため、他の方法ではそれを「見る」ことができません。
メソッドへのパラメーターもローカル変数と見なされます。
次のレベルはインスタンス変数で、そのスコープはすべてのメソッドですが、インスタンスのコンテキスト内のみです。各インスタンスは独自のコピーを取得します。
その後、スコープがすべてのインスタンスである静的変数を取得します。定義されているクラスごとに 1 つのコピーしかありません。
コードを「修正」するには、次のことができます。
eg()
メソッドに渡しますstatic
メソッドの外で宣言される変数を作成する