class ListTest
{
int number;
ListTest(int number)
{
this.number=number;
}
public String hop()
{
return "ListTest Number:"+number;
}
public static void main(String[] args)
{
List list=new ArrayList();
for(int i=0;i<5;i++)
{
list.add(new ListTest(i));
}
for(int i=0;i<list.size();i++)
{
ListTest test=(ListTest)list.get(i);
System.out.println(test.hop());
}
}
}如果把变量number改成static int number静态的,那么list中存放的数字都是4,这是为什么,请各位朋友帮忙!

解决方案 »

  1.   

    如果static int number,number就是类变量,为所有实例对象共享
    所以它的值就是最后一次修改的值。最后一次修改发生在
    for(int i=0;i<5;i++)
            {
                list.add(new ListTest(i));
            }
    的最后一次循环中,即list.add(new ListTest(4));所以它会是4.
      

  2.   

    当没有static关键字的时候,楼主创建的5个对象都有它自己的number属性.比如第一个对象的number值就是0,第二个对象的number值是1...他们没有直接的联系。比如改变第一个对象的number不会影响第二个对象number的值.当加上关键字static的时候,意味这这个域不会和包含他的那个类的任何实例也就对象关联在一起。
    定义static int number,number属于类也就是属于所有的对象,而不属于单独的某个对象。当number值发生改变的时候,因为number是共享的,所有对象读到的number也就发生改变。
      

  3.   

    用 static 修饰 表示变量为静态的,那么这个变量时类属性, 就是说可以被这个类的所有实例访问并可修改,    谁最后修改它,  它表示的就是当前值。。for(int i=0;i<5;i++)
      {
      list.add(new ListTest(i));
      }这里i 最后修改为4  所以 都是4
      

  4.   

    先要知道static的含义:
    static 关键字表示的是类的变量或方法,当变量被声明成static时就表示该变量是类变量,类变量和类方法在内存中存储在静态代码区中被所有的对象所共享,只要其中有一个对象改变了它的值,那么其他对象访问时就是修改后的值。