java初学者,问专业高手一个弱弱问题,请高手们能帮帮小弟,在此万分感谢!

代码如下:
public class test {
static String color="绿色";
public test(String color){
this.color+=color;
}
public static void main(String [] args){
test t1=new test("红色");
test t2=new test("黄色");
System.out.println(t1.color);
System.out.println(t2.color);
System.out.println(color);
}
}
小弟我实在弄不懂为什么输出的结果是:
绿色红色黄色
绿色红色黄色
绿色红色黄色
我只知道这肯定和“static”静态变量有关,请高手们能耐心解释清楚,小弟我不甚感激啊!
我的目的是请高手们帮我解释“static”静态变量在java中是如何使用的,不要告诉我把“static”删除了就OK了。请高手告诉我在此程序里面的第一条输出语句“System.out.println(t1.color);”为什么会出现有“黄色”?难道通过两句代参的实例化对象之后,整个color变成了“绿色红色黄色”?难道我只要调用color,不管是哪个对象调用它,结果都是一样的吗?谢谢······小弟在线等····

color属性是test类里面的static静态属性 也就是用test实例化的所有对象都共用这一个属性
定义的时候 color="绿色";
声明t1并实例化
test t1=new test("红色");
这个时候color就变成了“绿色红色”
声明t2并实例化
test t2=new test("黄色");
这个时候color变成了“绿色红色黄色”
因为t1 t2用的都是一个color 才造成这种结果的
这也是静态变量的一种用法
在c#里面这个分的比较细 类的静态属性只能通过类名来调用
java里的静态属性可以通过对象名调用 但是实际上那是类属性 该类的所有对象都使用同一的静态属性

(java的混乱可见一斑)
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-24
静态变量是全局的,类中任何一个地方给它赋值都可以的。
把静态变量改掉就ok了
public class test {
private String color = "绿色";

public test() {
// TODO Auto-generated constructor stub
}

public test(String color) {
this.color += color;
}

public static void main(String[] args) {
test t = new test();
test t1 = new test("红色");
test t2 = new test("黄色");
System.out.println(t1.color);
System.out.println(t2.color);
System.out.println(t.color);
}
}本回答被网友采纳
第2个回答  2010-11-24
其实与static关系不大
因为你在test method中写的是this.color+=color 这会让color的值 累加 你在main method中有2次赋值 在最开始有一次赋值 所以会是绿色红色黄色
第3个回答  2010-11-24
static修饰的变量是静态的,指的是类生成的对象都共享该变量,即所有对该变量的操作都保存,生存期为整个文件
相似回答