问题标签 [javap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java & Javap:如何确定哪个对象接收 Invokevirtual
我正在查看 Javap 的输出。例如:
这段代码
生成:
所以我看到在这种情况下该对象由val$foo
. 并在类元数据中
但现在我想了解更多关于原始对象的信息foo
。例如,我知道它在其中一个字段中有这些数据:
JVM如何知道val$foo
指向什么?
java - 我们可以在 java 程序中使用 Javap 命令吗?
我需要编写一个程序来跟踪调用方法的方式。所以,我正在尝试使用 invokestatic、invokevirtual、invokeinterface、invokespecial 来跟踪方法调用并跟进。
为此,我必须将 (javap -c sample) [sample is the class] 的结果输入到程序中。
所以我的问题是,是否有可能不是输入 (javap -c sample) 的结果文件,而是输入类名作为示例,然后程序可以在程序内部创建一个执行 javap 的文件并将结果输出到特定文件,程序的其余部分可以照常执行。?
java - 如何使用javap查看Java代码中的哪些字节码行对应了哪些行?
我的任务是创建一种方法来计算给定向量的大小,然后javap -c
将其分解。
现在我必须展示幅度框架中的每个局部变量在 java 中对应什么,以及哪些字节码行对应什么。
这是我制作的方法:
这是使用的结果javap -c
:
java - 使用 Javap -v 时局部变量表构造中的错误?
我尝试了以下代码:
输出很明显 "hi"
。但是当我使用 来查看字节码时javap -v
,我得到了以下信息。
表中仅显示了一个局部变量,其中使用了 3 个局部变量(0、1、2 校验字节码load
和store
指令)。有对此的解释吗?是否忽略值为 null(最终值)的局部变量?
java - JAVA中java.sql.DriverManager中初始化的getDriver方法在哪里?
我正在浏览 sql 包中的类。我碰巧通过“javap DriverManager.class”查看了DriverManager.class中的方法。如果我没记错的话,它显示了 Driver 类的方法-get Driver。(如果我是,请纠正我并告诉我正确的信息)。现在我查看了 Driver.class 并找不到该方法。那存储在哪里?提前致谢。附上图片!!
java - 使 Java 编译器在类文件中包含符号常量字段引用 - 可能吗?
众所周知,Java 编译器会在编译时从其他类中提取常量字段值。生成的类文件不包含此类常量的常量池条目(任何类型)。
问:可以告诉编译器这样做吗?(Oracle JDK 7 会很好)
作为说明,考虑一段
out.println(some.other.class.FOO)
读取 FOO(例如public static final int FOO = 1234
)并输出它的代码。我能够找到println
没有问题的引用,但是常量变成了匿名的sipush 1234
。
对于类级别的依赖关系分析,在这里有透明度会很棒!请注意,我并不是要求在依赖代码中以某种方式出现任何更改的值(请参阅有关该问题的大量其他 SO 问题)...
我正在考虑 javac 的 Java Compiler API 插件,但这听起来有点牵强?有任何想法吗?
java - Java中内部类和外部类的关系?
这是我的 Book.java 代码
当我遵守并使用它时,javap
我得到了两个类的以下内容
为了Book$BookReader.class
这是输出代码
我的问题是为什么在此处进行任何引用时添加final以及为什么要进行此引用?它在内部类中有什么用?
为了Book.class
为什么要为变量添加静态以及为什么在这里将 Book 作为参数传递?
如果可能的话,请用简单的语言解释一下!
java - java中内部静态类的构造函数?
我写了以下代码
当我在我得到的编译代码上使用 Java 类文件反汇编程序 javap
我的问题是,既然 ReaderFound 是一个静态类,它怎么会有一个默认构造函数?如果是,为什么?是否允许?
如果允许,在 Reader1$ReaderFound 类中可以找到什么样的构造函数,因为它不能是静态的。(另外,由于构造函数被隐式调用来初始化一个对象,并且由于 ReaderFound 是一个静态类,所以我们不会有它的对象。我对第一个问题的观点)
java - JAVA中的Class格式中没有字段标志是什么意思?
这是我的代码片段:
我创建了一个本地类,以查看当没有从编译器为本地类中的变量编写任何修饰符时,我得到了什么样的访问修饰符。
这就是我在 JAVAP 中得到的
所以基本上标志字段留空所以我很困惑这个变量得到什么样的访问修饰符
因为如果我添加
private int a=10;
或者public int a=10;
我得到
或者
那么默认情况下获取什么样的访问修饰符呢?
java - .class 文件不包含变量名称,尽管创建这些名称的设置已激活
我试图找出 .class 文件出现奇怪效果的原因。似乎对于接口,传递给函数的变量的名称没有列出,但在实现类中却列出了。我在使用 JD-Gui 反编译我自己的一些类文件时偶然发现了这种效果。
我用这两个文件检查了这个:
人.java
PersonImpl.java
JD-Gui 在反编译时返回:
使用javap -verbose x.class
我得到类似的结果:打印的方法签名从接口到实现类不同。一个错过了我在源代码中指定的变量名,另一个有它们。
我试图回答我研究Java 虚拟机规范的问题,但不得不承认我未能通过本文档找到方法。
这样设计有什么原因吗?
编辑:
由于我收到了所有好的答案,我在接口和实现类中添加了一些行,以支持答案中的陈述:s
人.java
JD-Gui 能够确定参数的名称:
JavaP 能够在 LocalVariableTable 中列出它:
当我向实现类添加一个抽象方法并使整个类抽象时(我需要这样做,因为它包含一个抽象方法)......
PersonImpl.java
...然后JD-Gui 无法反编译这个类文件。但幸运的是 javap 仍然能够转储文件。所有非抽象的方法都保留它们的 LocalVariableTable。抽象方法有签名,但既没有 Code,也没有 Lines,甚至没有 LocalVariableTable(这是预期的)