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