2

だから私はどのようにして3つのクラスを互いに呼び出すことができるかを理解しようとしています。

これがメインクラスです。

public class TestStudent {
    public static void main(String[] args) {
        myStudent mystudent_obj = new myStudent();
        mystudent_obj.show_grades();
        mystudent_obj.change_grades();
        mystudent_obj.show_grades();
    }
}

これは、上記のクラスで呼び出される 2 番目のクラスです。2 番目のクラスは別の 3 番目のクラスを呼び出し、2 つの関数を使用してそれを操作しようとします。関数show_gradesは 3 番目のクラスの変数を出力するだけで、関数は 3 番目のクラスchange_gradeの変数を変更しようとします。

public class myStudent {
    public void show_grades(){
        Student student_obj = new Student();
        System.out.println(student_obj.studGrade);
        System.out.println(student_obj.studID);
    }

    public void change_grades(){
        Student student_obj = new Student();
        student_obj.studGrade='V';
        student_obj.studID=10;
    }
}

これは 3 番目の呼び出しで、2 つの変数しかありません。

public class Student {
    public int studID = 0;
    public char studGrade = 'F';
}

プログラムを実行すると、エラーなしで実行され、次の出力が得られます。

F
0
F
0

show_gradesただし、関数が機能し、成績が表示されることはわかりますが、関数change_gradesは成績を変更しません。

最終結果は、次のようになります

F
0
V
10

グレード変更機能は、これらの変数を変更する必要があるため、何が起こっているのでしょうか?

4

1 に答える 1

3

myStudent クラスでは、各メソッドで Student の新しいインスタンスを作成しています。つまり、各メソッドにはクラス Student のローカル変数があります。show_grades2 回目に呼び出すと、新しいインスタンスが作成され、デフォルト値は 0 と F になります。

変数を作成して代わりに使用すると、変更グレードは各メソッドのローカル変数ではなくインスタンス変数の変数を変更します。これは、 Wikipediaで詳しく読むことができるプログラミングのスコープによるものです。

public class myStudent {
    private Student student_obj = new Student();

    public void show_grades() {
       System.out.println(student_obj.studGrade);
       System.out.println(student_obj.studID);
    }

    public void change_grades(){
        student_obj.studGrade='V';
        student_obj.studID=10;
    }
}
于 2012-04-07T22:27:26.057 に答える