- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在网上看java编译才知道
public class Test {
private String s = "TESTTEST";
}
到
public class Test {
private String s;
public Test() {
s = "TESTTEST";
}
}
我说得对吗?
现在我试着自己理解这个。所以我通过调用编译类 Test.java
javac Test.java
在它之后,我读到我可以使用 javap
来读取编译后的代码(=字节码)。
所以我试图在字节码中看到编译器的重组,我在上面提到过(decleration 在构造函数中)。但是怎么办?? javap
是合适的工具吗?如果是,使用哪些参数?
感谢您的帮助!
编辑:
好的,到目前为止谢谢!你能解释一下如何读取 javap -c Test
的输出吗?
C:\Users\MyName\Desktop>javap -c Test
Compiled from "Test.java"
public class Test {
public Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #2 // String TESTTEST
7: putfield #3 // Field s:Ljava/lang/String;
10: return
}
最佳答案
由于您的字段是private
,您还需要提供-p
参数以查看私有(private)成员。为了查看多个构造函数会发生什么,我添加了一个额外的构造函数。
class Test {
private String s = "TESTTEST";
Test() {
}
Test(int x) {
}
}
javap -c -p Test.class
class Test {
private java.lang.String s;
Test();
Code:
0: aload_0
1: invokespecial #10 // Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #12 // String TESTTEST
7: putfield #14 // Field s:Ljava/lang/String;
10: return
Test(int);
Code:
0: aload_0
1: invokespecial #10 // Method java/lang/Object."<init>":()V
4: aload_0
5: ldc #12 // String TESTTEST
7: putfield #14 // Field s:Ljava/lang/String;
10: return
}
在两个构造函数中,这基本上是:
<constructor> {
super(); // Instructions: 0, 1
this.s = "TESTTEST"; // Instructions: 4, 5, 7
return; // Instructions: 10
}
教你字节码超出了 StackOverflow 的范围。参见 The Java Virtual Machine Instruction Set字节码指令的完整列表。
关于java - 使用 javap 读取字节码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342953/
public static java.util.List getFoo(java.lang.String) 上述方法返回一个 List ,但是 javap命令返回以上内容(它没有显示 List 是 S
我正在阅读 Herbert Schilds 关于 java 中泛型类型删除的文章。据说在类上运行 javap 应该会在类型删除后为我提供有关公共(public)、包保护和 protected 字段和方
我正在阅读 Herbert Schilds 关于 java 泛型中类型删除的文章。据推测,在类上运行 javap 应该会在类型删除后为我提供有关公共(public)、包保护和 protected 字段
我们能否以可编程的方式在我们自己的 java 代码中使用 javap? 例如下面的代码: public class TestClass { public static void main(St
我创建了一个非常简单的类 Test.java import java.util.*; public class Test { public static void main(String[]
javap命令有几个选项,其中之一是-l,它可以打印行号和局部变量表。假设一个java程序已经编译成功,并且有“Main.class”文件,那么运行javap -l Main会产生如下内容: publ
在 java profiler 命令输出中,我在尖括号中看到了这些符号,例如 java.util.Queue java.util.TreeMap 如果我错了,请纠正我;通过一些练习,我已经能够将 E-
每次我试图理解已编译 Java 文件的反汇编代码时,我都想知道为什么缺少一些指令编号。 一个小例子: 我反汇编了 ($ javap -c HelloWorld) 一个简单的 HelloWorld 类。
如果我编译如下源代码: 1. public class Example { 2. public boolean foo(boolean a, boolean b, char ch) { 3.
有关常量池的 javap 命令生成的输出的小问题。当 javap 打印池时,它将字符串常量定义为 Asciz 字符串,我理解这意味着 null 终止 Ascii: const #20 = Asciz
Javac/javap 自带工具简单使用 Created: Mar 10, 2021 2:37 PM 使用javac 加上文件的目录 可以将.java 文件编译为.class 文件 (注意:需
实际上,这个问题有点广泛。我知道 javac 将 java 文件编译成字节码,一个类文件。所以,类文件应该包含 jvm 指令等等。另一方面,查看这些指令的唯一方法是使用 javap -c 反编译类文件
我有一个非常简单的类(class): package MyDev; public class Point3D { public Point3D(){x = 0; y = 0;z = 0;}
我创建一个名为 JVMClassTest 的 Java 类,然后进行编译。之后,我运行“javap -verbose JVMClassTest”。常量池的#4在哪里。 public class
在网上看java编译才知道 public class Test { private String s = "TESTTEST"; } 到 public class Test { pri
这是一个非常特殊的案例,似乎是 .class 文件损坏。我们的应用程序依赖于其他团队提供的依赖项。有 2 个相关的 java 文件:FTGService 和 FTGServiceLight 实现 FT
我试图找出类文件中常量池部分下的以下两个条目: int foo(int x) { return x; } #11 = Utf8 foo #12 = Utf8
众所周知,在 java 中,javap(java 解析器)实用程序显示类中的所有方法名称。 Dot-Net 有等效的实用程序吗? 最佳答案 您必须使用反射。试试这个代码: var methodName
当我用 javap 反汇编枚举时,枚举的隐式构造函数参数似乎丢失了,我不明白为什么。 这是一个枚举: enum Foo { X } 我用这个命令编译和反汇编这个(在 Java 8u60 上): jav
在一个非常简单的 HelloWorld 应用程序上运行 javap 时,我对常量池周围的输出有些困惑。 测试代码 public class TestClass { public static
我是一名优秀的程序员,十分优秀!