java基础知识System.out.print

时间:2014-08-14 16:18:42

标签: java

我有以下代码:

    class Baap {
    public int h = 4;
    public int getH() {
        System.out.println("Baap " + h);
        return h;
    }
}

public class Beta extends Baap {
    public int h = 44;
    public int getH() {
        System.out.println("Beta " + h);
        return h;
    }

    public static void main(String[] args) {
        Baap b = new Beta();
        System.out.println("testing"  + b.getH());

    }
}

有人可以解释为什么这个代码打印: 输出:

Beta 44
testing44

为什么不首先打印testing

编辑: 我现在看到了,我有一个println,并在一个方法中调用另一个printn。谢谢ERAN

2 个答案:

答案 0 :(得分:4)

在调用方法之前,始终完全评估方法参数。所以这一行:

System.out.println("testing"  + b.getH());

评估为:

String lhs = "testing";
String rhs = b.getH();
String argument = lhs + rhs;
System.out.println(argument);

该扩展的第二行打印出“Beta 44”,因此您看到了结果。

正如我在评论中所指出的,你不需要任何继承来证明这一点 - 你甚至不需要一个实例,尽管这并不复杂。这是一个更简单的例子,显示了同样的事情:

public class Test {
    public static String printAndReturn() {
        System.out.println("In printAndReturn");
        return "bar";
    }

    public static void main(String[] args) {
        System.out.println("left " + printAndReturn());
    }
}

输出:

In printAndReturn
left bar

(有关进一步的实验,尝试使用两种不同的方法,并使用method1() + method2() ...您会发现method1()始终在method2()之前执行。)

答案 1 :(得分:0)

评估第一个b.getH(),因为要打印"testing" + b.getH(),您必须知道b.getH()是什么。

b.getH()触发一些打印(Beta 44),然后只有System.out.println("testing" + b.getH())打印testing44