A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

建立一个自定义类的ArrayList数组,但是添加元素时发现后面添加的元素会让所有元素都变了,为什么会这样呢,哪位大神能解释一下?要怎么做才能不这样呢?代码如下:
import java.util.ArrayList;
class T1 {
    T1(){
    }
    public static void main(String[] args)    {
        ArrayList<Txt> txt = new ArrayList<Txt>();
        Txt first = new Txt();
        first.setTxt("菜品名",0.0);
        txt.add(first);
        Txt secound = new Txt();
        secound.setTxt("ss",2.3);
        txt.add(secound);
        Txt a = new Txt();
        for (int i = 0;i < txt.size() ;i++ ) {
            System.out.print(i + 1 + "----");
            a = txt.get(i);
            a.showTxt();
        }
    }
}

class Txt {
    Txt(){
    }
    private static String name;
    private static double price;
//成员方法,用于设置菜品
    public static void setTxt(String n,double p){
        name = n;
        price = p;
    }
//成员方法,用于显示菜品
    public static void showTxt(){
        System.out.println(name + "----" + price);
    }
//成员方法setName,用于设置菜品名称
    public static void setName(String n){
        name = n;
    }
//成员方法getName,用于获取菜品名称
    public static String getName(){
        return name;
    }
//成员方法setPrice,用于设置菜品价格
    public static void setPrice(double p){
        price = p;
    }
//成员方法getPrice,用于获取菜品价格
    public static double getPrice(){
        return price;
    }
}


6 个回复

倒序浏览
对象中的static修饰符去掉。 static破坏了对象的封装性
回复 使用道具 举报
好的,我试一下
回复 使用道具 举报
My_Android 发表于 2016-6-6 11:50
对象中的static修饰符去掉。 static破坏了对象的封装性

去掉static后就正常了,为什么呢?大神能简单说一下么?static破坏的对象的封装性是什么意思?
回复 使用道具 举报
不知道,一般写的时候都不加,不知道为什么
回复 使用道具 举报
dreamhunter 发表于 2016-6-6 17:06
去掉static后就正常了,为什么呢?大神能简单说一下么?static破坏的对象的封装性是什么意思? ...

加了static就变成静态的东西了,即对象没有建立这些东西就已经存在了。也可以说这样说,所有对象的都共享了这些stati数据,如果一个对象改变了其中的值,另一个对象的值也会发生改变!
回复 使用道具 举报
My_Android 发表于 2016-6-6 21:48
加了static就变成静态的东西了,即对象没有建立这些东西就已经存在了。也可以说这样说,所有对象的都共享 ...

有点感觉了,谢谢啊,大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马