首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java字节码DUP

Java字节码DUP
EN

Stack Overflow用户
提问于 2012-09-15 23:16:49
回答 2查看 4.7K关注 0票数 10

我想知道为什么下面的字节码(用于抛出异常)中的异常是重复的。

代码语言:javascript
复制
NEW java/lang/IllegalArgumentException
DUP
INVOKESPECIAL java/lang/IllegalArgumentException <init> ()V
ATHROW
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-15 23:23:54

我将逐行分析这段代码,其中[] =使用该操作后的新堆栈:

init SomeIllegalArgumentException

  • DUP将一个新的方法放到堆栈上复制它,SomeIllegalArgumentException

  • INVOKESPECIAL弹出顶部的方法并通过调用它的方法SomeIllegalArgumentException对其进行初始化(init方法不会返回要放回堆栈的对象,因此必须首先复制该对象以便将其保留在堆栈上)

  • SomeIllegalArgumentException抛出另一个(与我们初始化的方法相同) []
票数 20
EN

Stack Overflow用户

发布于 2012-09-15 23:22:48

在字节码中,对象首先由类创建,然后在该对象上调用构造函数。构造函数的签名以voidV结尾,因为它返回任何内容。这意味着对象的原始引用的副本必须保留在堆栈上(或在变量中),以便可以在调用构造函数后抛出。

顺便说一下,构造函数的内部名称是<init>,静态初始化器代码的内部名称是<clinit>

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12438567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档