我想知道为什么以下字节码中的异常(用于抛出异常)是重复的。
NEW java/lang/IllegalArgumentException
DUP
INVOKESPECIAL java/lang/IllegalArgumentException <init> ()V
ATHROW
答案 0 :(得分:14)
我将逐行分析这一行,其中[] =使用该操作后的新堆栈:
IllegalArgumentException
放入堆栈 [SomeIllegalArgumentException] 答案 1 :(得分:8)
在字节代码中,首先按类创建对象,然后在该对象上调用构造函数。对于V
,构造函数的签名以void
结尾,因为它确实返回任何内容。这意味着对象的原始引用的副本必须保存在堆栈(或变量)中,以便在调用构造函数后抛出它。
BTW构造函数的内部名称为<init>
,静态初始化代码的内部名称为<clinit>