SomeIllegalArgumentException

SomeIllegalArgumentException

我想知道为什么重复以下字节码中的异常(用于引发异常)。

NEW java/lang/IllegalArgumentException
DUP
INVOKESPECIAL java/lang/IllegalArgumentException <init> ()V
ATHROW

最佳答案

我将逐行分析其中[] =使用该op后的新堆栈:

  • NEW将新的IllegalArgumentException放入堆栈[SomeIllegalArgumentException]
  • DUP复制它[SomeIllegalArgumentException,SomeIllegalArgumentException]
  • INVOKESPECIAL从顶部弹出,并通过调用其方法[SomeIllegalArgumentException]对其进行初始化(init方法不会将对象返回放回堆栈,因此必须首先复制该对象,以便将其保留在堆栈)
  • ATHROW抛出另一个(与我们初始化的一个重复)[]
  • 08-06 05:15