咨询Java中调用mark()方法后代码执行顺序异常的原因
关于Java中mark()方法执行顺序的问题解答
嗨,我来帮你理清这个代码的执行逻辑,你遇到的问题其实是Java方法调用和参数求值顺序的典型场景。
首先先把你的代码补全成可运行的完整版本,方便理解:
class Student { String name; int age; String gender; String mark() { System.out.println("Allan"); return "Allan"; } } public class Main { public static void main(String[] args) { Student s = new Student(); // 你说的调用场景应该是这句 System.out.println("The Student's name is " + s.mark()); } }
你疑惑的点是:明明感觉应该先打印"The Student's name is ",再调用mark()输出名字,但实际却是先出"Allan",再出完整语句。这背后的执行逻辑是这样的:
- 当执行
System.out.println("The Student's name is " + s.mark())时,Java会先完成所有参数的计算,再执行println方法本身。这里的参数是一个字符串拼接表达式:"The Student's name is " + s.mark()。 - 为了完成这个拼接,JVM必须先调用
mark()方法来获取它的返回值——毕竟要把返回值和前面的字符串拼起来。 - 进入
mark()方法后,第一行代码System.out.println("Allan")会立即执行,所以控制台先打印出"Allan"。 - 接着
mark()方法执行return语句,返回字符串"Allan",回到主方法的拼接表达式中。 - 现在拼接完成,得到完整字符串"The Student's name is Allan",然后才会执行外层的
println方法,把这个完整字符串输出到控制台。
简单来说:方法参数的求值优先级高于方法本身的执行,所以mark()里的打印语句会先于外层println的完整输出执行。
内容的提问来源于stack exchange,提问作者Crox
相关产品推荐
相关产品推荐

