2つの問題があります:
まず、のインスタンスがなくても、randomvariable
からに値を割り当てようとしています。これは、暗黙的にそうであるように、インスタンスメソッドでは問題ありませんが、これは静的メソッドです。main
Class1
randomvariable
this.randomvariable
次に、関与Class2.ranMethod
するインスタンスがない状態で、から値を読み取ろうとしています。Class1
インスタンス変数とは何かを理解することが重要です。これは、クラスの特定のインスタンスに関連付けられた値です。したがって、というクラスがある場合Person
は、という変数がある可能性がありますname
。今Class2.ranMethod
、あなたは効果的に書いているでしょう:
name.getSomething();
それは意味がありません。まず、このコードを関連付けるPerson
ことはまったくありません。次に、どの人物が関与しているかはわかりません。
同様に、main
メソッド内ではインスタンスがないため、コンテキストを取得していません。
これが機能する代替プログラムであるため、違いがわかります。
public class Person {
// In real code you should almost *never* have public variables
// like this. It would normally be private, and you'd expose
// a public getName() method. It might be final, too, with the value
// assigned in the constructor.
public String name;
public static void main(String[] args) {
Person x = new Person();
x.name = "Fred";
PersonPresenter.displayPerson(x);
}
}
class PersonPresenter {
// In a real system this would probably be an instance method
public static void displayPerson(Person person) {
System.out.println("I present to you: " + person.name);
}
}
コメントからわかるように、これはまだ理想的なコードではありませんが、元のコードにかなり近づけたいと思いました。
ただし、これは機能するようになりました。特定のインスタンスmain
のインスタンス変数の値を設定しようとしています。同様に、パラメーターとしてインスタンスへの参照が与えられるため、そのインスタンスの変数の値を見つけることができます。presentPerson
name