0
    public class ex11_2 {
    public static void main(String[] args){
        Object a=new Person("abc1","def1","ghi1");
        System.out.println(a.toString());
        Object b=new Person("abc2","def2","ghi2");

        System.out.println(a.toString());
    }
}

class Person{
    private static String name;
    private static String address;
    private static String phoneNo;

    public Person(){
    }

    public Person(String name,String address,String phoneNo){
        setName(name);
        setAddress(address);
        setPhoneNo(phoneNo);
    }

    public String toString(){
        return super.toString()+(" "+getName()+","+getAddress()+","+getPhoneNo()+".");
    }

    public static String getName() {
        return Person.name;
    }

    public static void setName(String name) {
        Person.name = name;
    }

    public static String getAddress() {
        return address;
    }

    public static void setAddress(String address) {
        Person.address = address;
    }

    public static String getPhoneNo() {
        return phoneNo;
    }

    public static void setPhoneNo(String phoneNo) {
        Person.phoneNo = phoneNo;
    }
}

皆さんこんにちは。私は Java プログラミングの初心者で、OOP について質問したいと思います。この小さなプログラムでは、Person のクラスを作成し、その toString() メソッドをテストします。

テストの結果は次のとおりです。

Person@635b9e68 abc1,def1,ghi1.
Person@635b9e68 abc2,def2,ghi2.

b の作成後に、b のデータ フィールドが a のデータ フィールドに置き換わる理由が気になります。ありがとう

4

4 に答える 4

5

メンバー変数は静的であり、クラスのどのインスタンスにも関連付けられていません。

private static String name;
private static String address;
private static String phoneNo;

静的メンバーは、クラスのインスタンス全体で使用できます。これを修正するには、それらを非静的メンバー変数に変更します。

private String name;
private String address;
private String phoneNo;
于 2013-04-04T04:47:13.713 に答える
1

、およびフィールドは static として宣言されているためname、クラス のすべてのオブジェクトに対して 1 つのコピーしかないか、これらの変数がこのクラスのすべてのオブジェクト間で共有されます。addressphoneNoPerson

staticここでとinstance変数の違いを理解する必要があります。詳細については、次のリンクを確認してください: link1link2

于 2013-04-04T04:48:36.730 に答える
0

クラス変数を次のように宣言したためstatic

private static String name;
private static String address;
private static String phoneNo;

これは、 のすべてのインスタンスPersonがまったく同じ値を持つことを意味します

于 2013-04-04T04:47:55.433 に答える
0

基本的に、staticクラスの変数を使用しています。これは、そのクラスのすべてのインスタンス (オブジェクト) に対するグローバル変数のようなものです。したがって、インスタンス (非静的) メソッド内で静的変数を変更している場合、それらの変更は global として反映されます。

Java の変数の詳細については、このリンクを参照してください。

于 2013-04-04T04:59:42.007 に答える