Các phân tích cú pháp biết nơi cuối thực hiện là gì và thậm chí thêm một sự trở lại, ví dụ:
public static void main(String args[]) {
}
biên dịch để:
public static main([Ljava/lang/String;)V
L0
LINENUMBER 34 L0
RETURN <------ SEE?
L1
LOCALVARIABLE args [Ljava/lang/String; L0 L1 0
MAXSTACK = 0
MAXLOCALS = 1
}
Và cùng áp dụng cho mã của bạn (mặc dù tôi đã được thêm vào trong trả về 0 vì mã của bạn không biên dịch):
public int doSomething(int x)
{
otherMethod(x);
System.out.println("otherMethod is complete.");
return 0;
}
public void otherMethod(int y)
{
//method body
}
mã được biên dịch:
public doSomething(I)I
L0
LINENUMBER 38 L0
ALOAD 0
ILOAD 1
INVOKEVIRTUAL TestRunner.otherMethod (I)V
L1
LINENUMBER 39 L1
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
LDC "otherMethod is complete."
INVOKEVIRTUAL java/io/PrintStream.println (Ljava/lang/String;)V
L2
LINENUMBER 40 L2
ICONST_0
IRETURN
L3
LOCALVARIABLE this LTestRunner; L0 L3 0
LOCALVARIABLE x I L0 L3 1
MAXSTACK = 2
MAXLOCALS = 2
// access flags 0x1
public otherMethod(I)V
L0
LINENUMBER 46 L0
RETURN <-- return inserted!
L1
LOCALVARIABLE this LTestRunner; L0 L1 0
LOCALVARIABLE y I L0 L1 1
MAXSTACK = 0
MAXLOCALS = 2
}
Do mã trong phương thức đang được chạy trong cùng một chuỗi với mã gọi và do đó, chuỗi này sẽ chặn chuỗi cho đến khi hoàn tất. –
Nó biết bởi vì phương thức trả về. –
(Java là một ngôn ngữ bắt buộc chạy trên một máy ảo bắt buộc. Điều này có nghĩa là các hoạt động hoàn thành (hoặc xuất hiện) theo thứ tự mà chúng được chỉ định.) –