没有在此程序中出现任何错误,但我的所需输出未到来。有人能帮助我吗?

时间:2015-10-12 04:42:20

标签: java methods constructor

class ThisIsASubClass {
    private int count=0;
    public ThisIsASubClass(){
    }
    public ThisIsASubClass(int num){
        count=num;
    }
    public int disp(){
        return count;
    }
}
public class MainClass {
    public static void main(String args[]){
        ThisIsASubClass obj=new ThisIsASubClass();
        ThisIsASubClass obj1=new ThisIsASubClass(12);
        System.out.print(obj.disp());
    }
}

我将输出设为0,但我的输出为12.我尝试使用方法很好但使用构造函数我不知道我错过了什么点。

3 个答案:

答案 0 :(得分:0)

您通过new ThisIsASubClass创建的每个实例(对象)都有自己的count字段。您正在将该字段初始化为0。你有两个构造函数:一个不带任何参数而不改变count,一个带int参数而 改变count

main中,您对构造函数进行了两次单独的调用,首先是不带参数的调用,只留下count

ThisIsASubClass obj=new ThisIsASubClass();

...然后是第二个,与构造函数分开,它接受一个参数并设置count

ThisIsASubClass obj1=new ThisIsASubClass(12);

您创建的两个单独实例(对象)之间没有交互。因此,您最终会得到obj引用的count等于0的实例,以及obj1引用的count等于{{0}}的单独实例{1}}:

            +-----------+
obj-------->| count: 0  |
            +-----------+

            +-----------+
obj1------->| count: 12 |
            +-----------+

然后此行使用12引用的实例:

obj

...因此输出System.out.print(obj.disp()); ,因为0的{​​{1}}是obj。如果你做了

count

...相反,你会得到0

答案 1 :(得分:0)

创建类的实例时,每个实例都有自己的实例变量。这些变量不会跨实例共享。 在这种情况下,您在obj1中将count的值设置为12,但是您正在打印未通过构造函数初始化的obj计数值。所以它会打印0。

答案 2 :(得分:0)

如果count0的初始值。

然后查看默认构造函数。

public ThisIsASubClass(){
    //there is nothing inside 
}
调用默认构造函数后

count=0;。如果在默认构造函数之后调用方法disp(),则打印返回零;

现在查看ThisIsASubClass(int num)构造函数。

调用此构造函数后,

count=num;。如果在此构造函数后调用方法disp(),则返回num;

然后查看您创建的对象。

    ThisIsASubClass obj=new ThisIsASubClass();
    ThisIsASubClass obj1=new ThisIsASubClass(12);

现在您应该了解obj.disp() = 0obj1.disp() = 12