java如何生成字节码文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何生成字节码文件?相关的知识,希望对你有一定的参考价值。

java生成字节码文件全过程:

Java 源码编译由以下三个过程组成:

1、分析和输入到符号表

2、注解处理

3、语义分析和生成class文件

流程图如下所示:

最后生成的class文件由以下部分组成:

    结构信息。包括class文件格式版本号及各部分的数量与大小的信息

    元数据。对应于Java源码中声明与常量的信息。包含类/继承的超类/实现的接口的声明信息、域与方法声明信息和常量池

    方法信息。对应Java源码中语句和表达式对应的信息。包含字节码、异常处理器表、求值栈与局部变量区大小、求值栈的类型记录、调试符号信息

参考技术A new String("Hellow world").getBytes();

本回答被提问者和网友采纳

如何查看class字节码文件

1、使用javac编译Java文件

2、使用javap -verbose查看class字节码文件

2.1 使用-g:none或-g:lines选项来取消或要求生成LineNumberTable

2.2 使用-g:none或-g:vars选项来取消或要求生成LocalVariableTable

2.3 实例

  D:\>javac -g:lines -g:vars Test.java

3、实例:

3.1 实例代码

public class Test {

    public int getInt(){
        int a = 1;
        return a;
    }

}

3.2 编译

D:\>javac Test.java

3.3 查看class文件

D:\>javap -verbose Test
Classfile /D:/Test.class
  Last modified 2016-6-6; size 243 bytes
  MD5 checksum a140b97d207299f2d645e25fc1552334
  Compiled from "Test.java"
public class Test
  SourceFile: "Test.java"
  minor version: 0
  major version: 51
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #3.#12         //  java/lang/Object."<init>":()V
   #2 = Class              #13            //  Test
   #3 = Class              #14            //  java/lang/Object
   #4 = Utf8               <init>
   #5 = Utf8               ()V
   #6 = Utf8               Code
   #7 = Utf8               LineNumberTable
   #8 = Utf8               getInt
   #9 = Utf8               ()I
  #10 = Utf8               SourceFile
  #11 = Utf8               Test.java
  #12 = NameAndType        #4:#5          //  "<init>":()V
  #13 = Utf8               Test
  #14 = Utf8               java/lang/Object
{
  public Test();
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>
":()V
         4: return
      LineNumberTable:
        line 1: 0

  public int getInt();
    flags: ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=1
         0: iconst_1
         1: istore_1
         2: iload_1
         3: ireturn
      LineNumberTable:
        line 4: 0
        line 5: 2
}

 

以上是关于java如何生成字节码文件?的主要内容,如果未能解决你的问题,请参考以下文章

idea字节码插件JClassLib深入解读JVM字节码

JAVA中的字节码是啥?

java 字节码文件详解

Java 虚拟机原理Class 字节码二进制文件分析 七 ( 局部变量表分析 )

字节码分析与操作

动态字节码技术 javassist 初探