方法调用输出令人困惑

时间:2014-08-10 19:39:51

标签: java

当在方法main中实例化对象引用b时,将自动执行类Beta中的方法getH()。当类Beta中的方法getH()被执行时,它的主体也会执行println语句。但是,当使用引用变量b作为方法main中的println语句参数调用方法getH()时,作为方法主体getH()的一部分包含的println语句不会打印。在我看来,当在任何情况下调用方法getH()时,它的主体(例如作为其主体的一部分包含的println语句)应该执行。但同样,这似乎并不是在这种情况下发生的事情。我试图理解为什么(或者我的推理是否不正确)......

class Beta {
    public int h = 44;
    public int getH() {
        System.out.println(" test " + h);
        return h;
    }
    public static void main( String[] args) {
        Beta b = new Beta();
        System.out.println( b.getH());
    }
}

1 个答案:

答案 0 :(得分:2)

当你声明方法它没有被评估时,你似乎期望声明也执行它。而是在调用它时执行。

public int h = 44;
public int getH() { // Declaration, not invocation.
    System.out.println(" test " + h);
    return h;
}
public static void main( String[] args) {
    Beta b = new Beta(); // Instantiation. Does not call getH.
    System.out.println( b.getH()); // <-- Now, getH is called on instance b.
}