Java class 文件信息
来源:互联网 发布:化学反应软件 编辑:程序博客网 时间:2024/04/30 04:53
在谈论JVM-运行时数据区时,我们遇到了一个方法区,关于方法区的信息都来自于class,在JDK的工具中,有一个javap命令可以用来显示class文件的信息。
查看class文件内容的命令如下:
javap -v XXX.clsss
在这里以TestClass.java示例
/** * */package com.hx;import com.hx.vo.BaseParam;/** * @author MichaelKoo * * 2017-7-12 */public class TestClass extends BaseParam implements Runnable { private String name; private static final int AGE = 18; public void run() { name = "MichaelKoo," + AGE; try { CsdnUtil.getContent(getClass()); } catch (Exception e) { e.printStackTrace(); } }}
编译成TestClass.class之后,使用javap命令打开信息如下:
Classfile /I:/adt_eclipse_work/HuanXinTest/bin/com/hx/TestClass.class Last modified 2017-7-12; size 785 bytes MD5 checksum 92698cfe5ce5c5322fa75fe4c2a54b2e Compiled from "TestClass.java"public class com.hx.TestClass extends com.hx.vo.BaseParam implements java.lang.Runnable minor version: 0 major version: 51 flags: ACC_PUBLIC, ACC_SUPERConstant pool: #1 = Class #2 // com/hx/TestClass #2 = Utf8 com/hx/TestClass #3 = Class #4 // com/hx/vo/BaseParam #4 = Utf8 com/hx/vo/BaseParam #5 = Class #6 // java/lang/Runnable #6 = Utf8 java/lang/Runnable #7 = Utf8 name #8 = Utf8 Ljava/lang/String; #9 = Utf8 AGE #10 = Utf8 I #11 = Utf8 ConstantValue #12 = Integer 18 #13 = Utf8 <init> #14 = Utf8 ()V #15 = Utf8 Code #16 = Methodref #3.#17 // com/hx/vo/BaseParam."<init>":()V #17 = NameAndType #13:#14 // "<init>":()V #18 = Utf8 LineNumberTable #19 = Utf8 LocalVariableTable #20 = Utf8 this #21 = Utf8 Lcom/hx/TestClass; #22 = Utf8 run #23 = String #24 // MichaelKoo,18 #24 = Utf8 MichaelKoo,18 #25 = Fieldref #1.#26 // com/hx/TestClass.name:Ljava/lang/String; #26 = NameAndType #7:#8 // name:Ljava/lang/String; #27 = Methodref #28.#30 // java/lang/Object.getClass:()Ljava/lang/Class; #28 = Class #29 // java/lang/Object #29 = Utf8 java/lang/Object #30 = NameAndType #31:#32 // getClass:()Ljava/lang/Class; #31 = Utf8 getClass #32 = Utf8 ()Ljava/lang/Class; #33 = Methodref #34.#36 // com/hx/CsdnUtil.getContent:(Ljava/lang/Class;)Ljava/lang/String; #34 = Class #35 // com/hx/CsdnUtil #35 = Utf8 com/hx/CsdnUtil #36 = NameAndType #37:#38 // getContent:(Ljava/lang/Class;)Ljava/lang/String; #37 = Utf8 getContent #38 = Utf8 (Ljava/lang/Class;)Ljava/lang/String; #39 = Methodref #40.#42 // java/lang/Exception.printStackTrace:()V #40 = Class #41 // java/lang/Exception #41 = Utf8 java/lang/Exception #42 = NameAndType #43:#14 // printStackTrace:()V #43 = Utf8 printStackTrace #44 = Utf8 e #45 = Utf8 Ljava/lang/Exception; #46 = Utf8 StackMapTable #47 = Utf8 SourceFile #48 = Utf8 TestClass.java{ public com.hx.TestClass(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #16 // Method com/hx/vo/BaseParam."<init>":()V 4: return LineNumberTable: line 13: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this Lcom/hx/TestClass; public void run(); descriptor: ()V flags: ACC_PUBLIC Code: stack=2, locals=2, args_size=1 0: aload_0 1: ldc #23 // String MichaelKoo,18 3: putfield #25 // Field name:Ljava/lang/String; 6: aload_0 7: invokevirtual #27 // Method java/lang/Object.getClass:()Ljava/lang/Class; 10: invokestatic #33 // Method com/hx/CsdnUtil.getContent:(Ljava/lang/Class;)Ljava/lang/String; 13: pop 14: goto 22 17: astore_1 18: aload_1 19: invokevirtual #39 // Method java/lang/Exception.printStackTrace:()V 22: return Exception table: from to target type 6 14 17 Class java/lang/Exception LineNumberTable: line 18: 0 line 21: 6 line 22: 14 line 23: 18 line 25: 22 LocalVariableTable: Start Length Slot Name Signature 0 23 0 this Lcom/hx/TestClass; 18 4 1 e Ljava/lang/Exception; StackMapTable: number_of_entries = 2 frame_type = 81 /* same_locals_1_stack_item */ stack = [ class java/lang/Exception ] frame_type = 4 /* same */}SourceFile: "TestClass.java"
其中有几个需要关注的节点:
- 类的信息,在关键字’Constant pool:’之前就属于类的基本信息,从中可以看出,类的修饰符(public )、类的完整名称(com.hx.TestClass)、类的父类完整名称(com.hx.vo.BaseParam)、类的接口信息(java.lang.Runnable)
- 常量池,在关键字’Constant pool:’之后,第一个’{‘之前的内容就属于常量池信息,
- 在’{‘之后,’}’之前就是类的方法信息,从中可以看出:方法的修饰符、方法的返回值类型、方法名称、方法的异常表、方法的局部变量表等信息
阅读全文
0 0
- Java class 文件信息
- Java class文件信息
- Java Class 文件解析
- .java .class文件编译
- Java class文件说明
- 加密Java class文件
- Java Class文件结构
- java class文件解析
- Java的class文件
- Java Class文件结构
- java class文件
- java class 文件
- java class文件结构
- Java Class文件结构
- Java Class文件详解
- Java-----反编译class文件
- java class文件简介
- Java Class文件结构
- iOS积累-iOS图片填充UIImageView(contentMode)
- UI测试常见bug
- TJU训练赛—D
- java 下的 AES org.bouncycastle.crypto 包加密解密算法示例
- Opencv在Release和Debug不同模式下的配置
- Java class 文件信息
- spark on yarn cluster 与 client 模式的区别
- HTML小结及css基础属性
- 未来币nxt 启动分析(1)
- 轮播图的实现原理
- Mysql 忘记root密码的解决方法
- 监控运行中jar包的jvm信息
- C++程序辨别数字、字母和汉字
- IPlot示波器