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

由于name,addressphoneNo字段被声明为静态的,因此类的所有对象只有一个副本Person,或者这些变量在该类的所有对象之间共享。

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 回答