日期:2014-05-20 浏览次数:20911 次
public class staticvariable { static String color = "绿色"; //当JVM加载的时候就会被第一个初始化 public staticvariable(String color) { this.color += color; } public static void main(String args[]) { staticvariable sv1 = new staticvariable("黄色"); //1 . 此时创建了一个实例 此时 color = 绿色黄色 staticvariable sv2 = new staticvariable("红色"); // 2. 此时有创建了一个实例 此时 color = 绿色黄色红色 //因为你在创建实例的时候就已经把值赋值完毕 [color=#FF0000] static 只会被加载一次 [/color] //所以你以下输出都是你所创建最后一个实例的值 也就是绿色黄色红色 System.out.println(sv1.color); System.out.println(sv2.color); System.out.println(color); } }
------解决方案--------------------
你应该搞清楚代码的执行顺序
当编译的时候首先static会被放到静态域中
static String color = "绿色";
当你去创建这个类的实例时候staticvariable sv1 = new staticvariable("黄色");
你会调用他的构造方法
public staticvariable(String color)
{
this.color += color;
}
最后你输出的时候结果肯定会变的
整理下大概过程是
//加载静态属性
1. static String color = "绿色";
//创建实例
2. staticvariable sv1 = new staticvariable("黄色");
//调用有参构造方法
3. public staticvariable(String color)
//给color 追求内容
4.this.color += color;
//color此时等于绿色黄色
5.JVM给color追求内容 追加后的结果是 绿色黄色