程序代码如下:public class ClassA
{
public static String str;
public ClassA()
{
str= new String();
}
public static void main(String [] args) throws Exception
{
str= "hello";
Thread.sleep(5000);
System.out.println(str);
}
}public class ClassB
{
public static void main(String[] args)
{
String str = (ClassA.name+="haha");
System.out.println(str);
}
}问题是,先运行ClassA,再运行ClassB,ClassB运行结束后输出nullhaha,而ClassA sleep 5秒后输出是hello.为什么操作的同一个静态属性运行的结果确没有任何联系呢?我原来是在一个类中用一个静态的HashMap保存数据,中途从另一个类中调用这个静态的HashMap却取不到任何数据,然后自己写了上面两个测试类,郁闷了半天越整越糊涂了.请教各位才子才女!! 不甚感激!

解决方案 »

  1.   

    什么是“先运行ClassA,再运行ClassB”,是两个不同的进程吗?如果是两个不同的进程输出结果肯定是nullhaha你只有在同一个jvm中,静态变量的值才可以传递,如你在ClassA中直接调用ClassB.main(new String[]{});
      

  2.   

    你根本没有操作同一个静态属性啊,你的ClassB里的ClassA.name存在吗?在你的ClassA里可没有name的定义,再说操作静态属性是类+属性名,在你这应该是ClassA.str
      

  3.   

    是我写错了,ClassB中调用ClassA中的静态属性,应该是ClassA.str.看了huoyin 的解释似乎有点明白,似乎还是绕不过来,再仔细想想.....
      

  4.   

    String str = (ClassA.str+="haha");此时,ClassA 里面的str并没有被赋值,就是等于null的。