javac 和 javap工具详解

写在前面

由于javac和javap是两个相反的过程,所以放在一起做分析。
关于javac和javap如果想要做详细的了解,还是需要看Oracle官网的介绍。访问入口如下:

本文内容均为自己阅读文档后自己总结的,后续如果发现其他好玩的,会继续更新。
当然,如果其中有错误,还请指正。

1、javac 和 javap简介

  • javac:接收由Java语言规范(JLS)定义的源代码(.java后缀的源文件),并生成由Java虚拟机规范(JVMS)定义的字节码类文件(.class)。简单来说就是把java文件编译为.class文件

  • javap:它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。

2、 javac

javac的用法:javac [ options ] [ sourcefiles ] [ @files ]
其中

  • option:命令行选项
  • sourcefiles :一个或多个要编译的源文件(比如 JavacAndJavapTest.java.java)
  • @files一个或多个对源文件进行列表的文件
  • 在cmd中,执行javac 或者javac -help命令,系统会提示javac的所有用法(如下图)。
    在这里插入图片描述
    关于javac,由于现在开发人员工作基本依赖eclipse和IDEA,所以基本上用不到其相关的命令。所以本文只讲两种情况:
    ①直接使用javac命令
    ②使用javac -g命令
    其他命令的适用方法详见:https://blog.csdn.net/hudashi/article/details/7058998

2.1 javac和javac -g命令的区别(含示例代码)

javac生成的是部分信息(不包含本地变量表、局部变量信息、常量池中的部分信息),而javac - g生成的是全量的信息。

  • 示例:
    首先新建一个类 JavacAndJavapTest.java,如下:
public class JavacAndJavapTest {
	//全局变量
	int i = 1;
	public void  getInt() {
		//局部变量
		int j = 2;
	}
}

执行javac编译得到.class文件,通过javap -v反编译后如下:

C:\Users\wendy\Desktop>javap -v JavacAndJavapTest.class
Classfile /C:/Users/wendy/Desktop/JavacAndJavapTest.class
  Last modified 2020-2-16; size 297 bytes
  MD5 checksum 8525b021df894472b5b5861501aa55c7
  Compiled from "JavacAndJavapTest.java"
public class JavacAndJavapTest
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Methodref          #4.#14         // java/lang/Object."<init>":()V
   #2 = Fieldref           #3.#15         // JavacAndJavapTest.i:I
   #3 = Class              #16            // JavacAndJavapTest
   #4 = Class              #17            // java/lang/O
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值