web-dev-qa-db-ja.com

Java-インスタンス変数とは何ですか?

私の割り当ては、ユーザーが入力する必要のあるインスタンス変数(String)を使用してプログラムを作成することです。しかし、インスタンス変数が何であるかさえ知りません。インスタンス変数とは何ですか?作成する方法は?それは何をするためのものか?

35
aqua

インスタンス変数は、クラスの内部でメソッドの外部で宣言された変数です:

class IronMan{

     /** These are all instance variables **/
     public String realName;
     public String[] superPowers;
     public int age;

     /** Getters / setters here **/
}

これで、このIronManクラスを他のクラスでインスタンス化して、次のような変数を使用できます。

class Avengers{
        public static void main(String[] a){
              IronMan ironman = new IronMan();
              ironman.realName = "Tony Stark";
              // or
              ironman.setAge(30);
         }

}

これが、インスタンス変数の使用方法です。恥知らずなプラグイン:この無料の電子ブックから抜粋した例はこちら here

68
Yash Sharma

インスタンス変数は、クラスのインスタンスのメンバーである(つまり、newで作成されたものに関連付けられている)変数ですが、クラス変数はクラス自体のメンバーです。

クラスのすべてのインスタンスには、インスタンス変数の独自のコピーがありますが、クラス自体に関連付けられている各静的(またはクラス)変数は1つだけです。

クラス変数とインスタンス変数の差

このテストクラスは違いを示しています

public class Test {

    public static String classVariable="I am associated with the class";
    public String instanceVariable="I am associated with the instance";

    public void setText(String string){
        this.instanceVariable=string;
    }

    public static void setClassText(String string){
        classVariable=string;
    }

    public static void main(String[] args) {
        Test test1=new Test();
        Test test2=new Test();

        //change test1's instance variable
        test1.setText("Changed");
        System.out.println(test1.instanceVariable); //prints "Changed"
        //test2 is unaffected
        System.out.println(test2.instanceVariable);//prints "I am associated with the instance"

        //change class variable (associated with the class itself)
        Test.setClassText("Changed class text");
        System.out.println(Test.classVariable);//prints "Changed class text"

        //can access static fields through an instance, but there still is only 1
        //(not best practice to access static variables through instance)
        System.out.println(test1.classVariable);//prints "Changed class text"
        System.out.println(test2.classVariable);//prints "Changed class text"
    }
}
26
Richard Tingle