将this.method2 ();跳过返回值



在这个代码示例中:"this.method2();"之后会读到什么?它会跳转到method2()之前返回的返回值?

public int method1(int returnedValue) {
// Do something 
returnedValue = 1;
this.method2(); // Where will it go after this line?
return returnedValue;
}
public void method2() {
// Do something 
}
public static void main(String[] args) {
sp.method2();
Stuff sp = new Stuff();
System.out.print(returned value);
}

现在你的主方法没有调用method1,而是考虑这个主方法:

public static void main(String[] args) { new Main().method1();}

假设Main是主类,这一行会发生什么:

this.method2();

是method2在method1返回值之前被调用,因为你在调用method2之前没有调用return

如果method1被这样定义:

public void method1(int returnedvalue)
{
    returnedvalue=1;
    return returnedvalue;
    this.method2();
}

那么method1将返回returnedvalue而不调用method2(上面的代码当然是坏的,因为this.method2()不可达)。

在method2结束并返回后,method1执行下一条语句,即return returnedvalue,它将返回并继续执行main

正如其他人所说,如果在method2中引发异常而没有被捕获,异常将从method2传播到method1,如果method1没有捕获它,它将传播到main,如果main没有捕获它,你的应用程序将崩溃:)。

如果您正在运行method1(),它将调用method2(),在它完成运行method2()之后,它将继续运行method1()并始终返回1(除非method2()将抛出异常)。

但是在这种情况下,您正在运行main(),它只打印"returned value" (String),并且在任何时候都没有调用method1()

最新更新