没用代码格式,sry,重新发下。public class Person {
public static int age=0;   //一个静态属性
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
}public class Test1 {
public static void main(String[] args) {
Person p=new Person();
p.setAge(10);//先将static属性设置为10
}
}public class Test2 {
public static void main(String[] args) {
Person p=new Person();
System.out.println(p.getAge());  //为什么这边出现的是0,而不是Test1中设置的10,static属性不是所有对象所公用么?
}}例子十分简单,我之前一直以为static属性是所有对象共用,能达到一改全改的目的,可以现在突然跑出来这个问题,我也不知道是不是之前理解错了,求指点。

解决方案 »

  1.   

    你new一个时候初始化肯定是原始的,不过我估计你想要的是个单例!!!
      

  2.   


    这个不是new的问题吧即使我在两个不同的main中,取一个单例模式类的instance,这两个实例对象也是不同的。
      

  3.   

    很简单你的Test1的main方法没有执行!也就是说没有设置!
    public class Test2 {
    public static void main(String[] args) {

                    Test1 p1 = new Test1();
    p1.main(args);
    //你在代码里加上这一句就正常了!
    Person p=new Person();
    System.out.println(p.getAge());  //为什么这边出现的是0,而不是Test1中设置的10,static属性不是所有对象所公用么?
    }
     结果是10
    }
      

  4.   

    因为你的TEST这个类并没有被调用.所以并没有执行p.setAge(10).
      

  5.   

    那按照你的意思,是不是两个new出的对象必须在同一个完整的程序调用中,才能实现数据共享?
      

  6.   

    static变量是在线程间通过class对象来共享的public class Student {
    public static String id = "id1";
    }测试类 public static void main(String[] args) {
    Student s1 = new Student();
    System.out.println(s1.id);

    s1.id = "id2";
    System.out.println(s1.id);

    Student s2 = new Student();
    System.out.println(s2.id);
    }测试类2 public static void main(String[] args) {
    Student s1 = new Student();
    System.out.println(s1.id);

    s1.id = "id1";
    System.out.println(s1.id);
    }可以发现,测试类1中s1对id的修改影响了s2这个新new出来对象的值,但并不影响另外的测试类的s1的值。
    关于static变量的线程间共享,进程间不共享 
      

  7.   

    你两个测试类,两个main方法,new 了两个对象,当然不一样了。
      

  8.   

    因为你通过new得到的不是同一个对象,你每次new的都是一个新的对象,同时staic的意思是静态的,表明同一个类中只是被初始化一次,但是你两次运行相当于重新开一次虚拟机了,那样肯定不能影响呀,套用上面哥们的一句话线程之间可以共享,进程不行
      

  9.   

    那按照你的意思,是不是两个new出的对象必须在同一个完整的程序调用中,才能实现数据共享?
    对的..你的程序都不是同一个.当然不会共享!就想QQ跟YY怎么会共享呢!
      

  10.   

    运行一个main你可以在任务管理器上发现有一个JAVAW.EXE进程.如果你再运行一个MAIN就会再有一个JAVAW.EXE!就是两个进程!线程中共享数据!进程中是不共享的!讲大白话就是线程还是一个程序!但进程就不是一个程序了!
    http://wenku.baidu.com/link?url=oHMe-5ct-Sc3GH8viI88eDJdlM1s5RquUCzgJXcLnN6iFrcA39CqnsnlLL6C7nmTLzvhz3zH-OP-GFHMhb19miF8onegWDU5kibNPO_7wuG
    参考这里吧!前面没说那么复杂是因为怕楼主陷进去!先不必管也可以的!你只要知道启动两个MAIN都不是一个程序了,所以不共享!不建议楼主去研究下去!因为涉及底层了!建议日后学好有兴趣再来研究!
      

  11.   


    谢谢你啊,我清楚了。之所以我有这个疑问确实是对一个程序与另外一个程序的边界模糊不清,之前一直使用一个main去做Demo,都很顺利,没啥问题。昨天突然想了下,如果是在web项目中,有使用到含static属性的类,那么多个不同的请求之间,是不是共享static属性呢?于是我想用一个main方法来代替一个请求,实际上错就错在这里,两个独立的main已经属于不同程序了。现在我知道了,在一个web应用中,多个不同请求之间的是可以实现static属性共享的。
      

  12.   


    谢谢你啊,我清楚了。之所以我有这个疑问确实是对一个程序与另外一个程序的边界模糊不清,之前一直使用一个main去做Demo,都很顺利,没啥问题。昨天突然想了下,如果是在web项目中,有使用到含static属性的类,那么多个不同的请求之间,是不是共享static属性呢?于是我想用一个main方法来代替一个请求,实际上错就错在这里,两个独立的main已经属于不同程序了。现在我知道了,在一个web应用中,多个不同请求之间的是可以实现static属性共享的。
    不客气的!懂了就结贴!接分吧!