[关闭]
@pastqing 2015-09-17T16:00:03.000000Z 字数 2440 阅读 2641

Java字节码学习笔记

java


一、Class文件的意义

1. 字节码(ByteCode):

下图可以体现java虚拟机提供的语言无关性:
此处输入图片的描述

2. Class文件的数据结构

类型 名称 数量
u4 magic(魔数) 1
u2 minior_version(次版本) 1
u2 major_version(主版本) 1
u2 constant_pool_count(常量计数) 1
cp_info constant_pool constant_pool_count - 1
u2 access_flags(访问标志) 1
u2 this_class(类索引) 1
u2 super_class(父类索引) 1
u2 interfaces_count 1
u2 interfaces(接口索引集合) interfaces_count
u2 fields_count(字段计数) 1
u2 fields fields_count

无符号数u1、 u2、 u4、 u8分别代表1个字节,2个字节,4个字节, 8个字节。xxx_info代表表结构。

使用javap -verbose xx.class命令可以看到class文件常量池中所有的常量:
此处输入图片的描述

  1. public class App {
  2. }

它只被关键字public修饰, 则它的access_flags的值应该为:0x0001 | 0x0020 = 0x0021

这里需要注意ACC_SUPER这个标志在JDK1.2以后的版本编译都为真

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注