无法使用构造函数?

时间:2016-02-20 07:49:40

标签: java constructor

所以,我不知道下面的程序为什么不打印1

class ck {
    static  int a,c;
    ck(int b, int d){
        a=b;
        c=d;
    }
    ck (){
        a=0;
        c=0;
    }
    public static void main (String[] args) {
        ck nnn=new ck();
        ck nn=new ck(5,1);

        System.out.print(nnn.a+nn.c);
    }
}

你能解释一下吗?

3 个答案:

答案 0 :(得分:6)

您声明了ac静态,因此第二次调用构造函数(此处为ck nn=new ck(5,1);)时,它会覆盖对象nnn和{{1}的值}。因此nnnnn.a + nn.c

答案 1 :(得分:4)

这是一个难题吗?

原因是因为您已将变量 $request_details = $course_request->get_all_course_requests(); $request_details= collect($request_details); $i = 0; foreach...... a声明为c,这意味着它们未附加到实例但已成为" global"类static

范围内的变量
ck

因此,通过调用第二个构造函数,您将全局变量static int a,c; 设置为a,将5设置为c,然后再打印{{1} (它与你前缀的实例无关),结果为1

解决方案,如果您要打印a + c,请将以上行更改为:

5 + 1 == 6

答案 2 :(得分:0)

这是因为在java中,只为静态变量维护了一个副本。 当行ck nnn=new ck();执行时,静态变量初始化为a = 0& C = 0。

再次,ck nn = new ck(5,1);执行,它是相同的& b如上所述,分配了新值(5& 1)。

因此,它将打印6。