实例化具有不同输入的类

时间:2012-03-16 15:27:25

标签: java oop

我有一个问题,现在我有两个课程如下

public class mainClass {
    public static void main(String[] args){
        String st1="st1";
        String st2= "st2";

        System.out.println(st1);
        System.out.println(st2);
        testClass t1=new testClass(st1);
        testClass t2=new testClass(st2);
        System.out.println(t1.getString());
        System.out.println(t2.getString());
    }

}
public class testClass {
    static String testString1;
        public testClass(String a ) {
            testString1=a;
        }
        public String getString(){
            return testString1;
        }
}

输出

st1
st2
st2
st2

不应输出以下内容?

st1
st2
st1
st2

因为我创建了两个testClass实例,每个实例都有不同的输入,为什么我得到相同的输出?

5 个答案:

答案 0 :(得分:3)

testString1中的testClass变量被声明为静态,因此它将在testClass的所有实例中保持相同的值。

如果希望testString1为每个创建的testClass实例保存唯一值,则需要删除静态声明。

答案 1 :(得分:0)

testString1staticstatic String testString1;)所以它在班级的所有实例之间共享。

答案 2 :(得分:0)

static String testString1;应为String testString1;。通过声明static,您已将单个String实例(名为testClass.testString1)与testClass的所有实例相关联。

答案 3 :(得分:0)

不是因为static关键字。 静态意味着该字符串对于此类的所有实例都是相同的。删除它,它将按预期工作。

答案 4 :(得分:0)

输出类似于静态变量。您必须了解静态以了解您的输出。

静态变量是变量,它是共享对象的所有实例的变量。您无需创建实例即可访问它。如果从一个实例更改它,那么对象将找到更改。

创建实例 t1 时,静态字符串 testString1 使用 st1 进行初始化。但是您创建实例的下一行 t2 testString1 使用 st2 进行初始化。 t1 t2 实际上是指同一个变量。因此,当您打印 t1.getString()时,它会获得 testString1 的更新值。