私はかなり複雑なクラスを持っていますが、なぜsuperUser
が常に印刷されているのか分かりません。もし私がprivate String username = "user"
と書いたとしたら、私はSystem.out.println(o1.username)
のような私のmain
メソッドでそれを呼び出すことができたでしょう。私の場合は、静的であるため、上記のようにsuperuserも表示されます。しかし、私は本当にそれを取得しません..それはJavaがコードを完全に読み込んで、引数がローカル変数username
に割り当てられている独自のコンストラクタを持つo2
という2番目のオブジェクトがあることを認識しているからですか?2つのコンストラクタと静的な文字列変数
私には分かりませんが、なぜSystem.out.println(o1.getUsername());
がスーパーユーザを印刷するのですか?
public class PrintMe {
private static String username = "user";
private int password = 1234;
public PrintMe(){}
public PrintMe(String username){
PrintMe.username = username;
this.password = 5678;
}
public void changePassword(int password){
System.out.println("The old password of " + this.getUsername() +
" was " + this.password);
this.password = password;
}
public String getUsername(){
return PrintMe.username;
}
public static void main(String[] args){
PrintMe o1 = new PrintMe();
PrintMe o2 = new PrintMe("superUser");
System.out.println(o1.getUsername()); // superUser
System.out.println(o1.password); // 1234
System.out.println(o2.getUsername()); // superUser
System.out.println(o2.password); // 5678
o1.changePassword(9000); // The old password of superUser was 1234
System.out.println(o1.getUsername()); // superUser
System.out.println(o1.password); // 9000
System.out.println(o2.getUsername()); // superUser
System.out.println(o2.password); // 5678
}
}
[this](https://stackoverflow.com/questions/32417953/how-does-the-static-keyword-work-in-java)を訪問しましたか?ところで、Javaは難しくありません;) – vinS
あなたの出力に関する何も予期せぬものです。あなたを混乱させる正確な行に私たちを案内できますか? –