class文件结构[4]
来源:互联网 发布:微信红包埋雷软件 编辑:程序博客网 时间:2024/05/20 09:47
【参考链接】
深入理解Java Class文件格式(三)http://blog.csdn.net/zhangjg_blog/article/details/21557357
深入理解Java Class文件格式(四)http://blog.csdn.net/zhangjg_blog/article/details/21658415
深入理解Java Class文件格式(五)http://blog.csdn.net/zhangjg_blog/article/details/21781021
通过gclasslib来粗略讲解一下.class文件的整体结构
整体结构如下所示
以如下源代码为例
Java Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.test.a;
@Deprecated
public class Test extends TestParent{
private double m1=100d;
public static final double m2=200d;
public void method1(double arg1) throws RuntimeException{
int v1=0;
try{
this.m1=arg1;
}catch(IllegalStateException e){
System.out.println(e.toString());
}
}
}
magic
前4个字节称为magic(魔数),统一为0xCAFEBABE(谐音cafe baby)。
version
接下来4个字节为minor version和majorversion。如图表示是使用JDK1.8编译生成的。
constant pool
常量池前面已经详细讲过,这里不在叙述
access_flags
标志名
标志值
标志含义
适用对象
ACC_PUBLIC
0x0001
0000 0000 0000 0001
public类型
类、接口、枚举、注解
ACC_FINAL
0x0010
0000 0000 0001 0000
final类型
类
ACC_SUPER
0x0020
0000 0000 0010 0000
使用新的invokespecial语义
类、接口
ACC_INTERFACE
0x0200
0000 0010 0000 0000
接口类型
接口
ACC_ABSTRACT
0x0400
abstract类型
类、接口
ACC_SYNTHETIC
0x1000
该类不由用户代码生成
类、接口、枚举、注解
ACC_ANNOTATION
0x2000
注解类型
注解
ACC_ENUM
0x4000
枚举类型
枚举
this
super
interfaces
fields
m1
m2
methods
<init>
method1
attributes
通用
Deprecated
以Class上的Deprecated属性为例
Synthetic
Class
SourceFile
InnerClasses
Field
ConstantValue
如前文所述,static final类型常量会有ConstantValue属性,用于在准备阶段设置值
Method
以method1()方法为例
Exceptions
这个Exceptions属性是在方法上throw的,下面的是在方法中try/catch/throw的
Code
Minor version应该是Maxinum stack depth,表示操作数栈的最大深度是3
Maximum local variables表示局部变量表占用的总空间大小是5个槽位
字节码指令如下
方法中的异常表如下
Code属性还还含有子属性,用于进一步存储一些额外信息
LineNumberTable
用于记录字节码指令的偏移量和行号之间的对应关系
LocalVariableTable
局部变量表,共有4个形式参数+局部变量
index表示局部变量占用的槽位的位置
其中double类型arg1占用的是1~2槽位,其余各占1个槽位。共5个槽位,跟Code中的Maximum local variables一致
- class文件结构[4]
- class文件结构-之一
- Java Class文件结构
- Class文件结构
- Class文件结构
- Java Class文件结构
- java class文件结构
- Java Class文件结构
- Class文件结构
- Class类文件结构
- JVM class文件结构
- class文件结构
- Java Class文件结构
- Class文件结构
- Class文件结构
- Class文件结构
- java class文件结构
- 4.1class文件结构
- js常用分割取字符串的方法
- Linux修改hostname时/etc/hosts、/etc/sysconfig/network ,hostname
- IDEA运行web工程报错,Error running wis-client-web: SSL HTTP Connector node not found: set up one in the ser
- [python计算金额]decimal常用操作
- Spring Cloud配置中心获取不到最新配置信息的问题
- class文件结构[4]
- x264动态改变参数
- 关于getElementsByClassName() 方法
- DispatcherServlet 和 ContextLoaderListener 的关系
- mysql "Too many open files”问题解决
- ndarray数据类型
- Xcode(IOS)百度地图开发起步篇
- java.lang.String 下面的toUpperCase()和toLowerCase()方法
- 四行命令 Ubuntu安装Oracle JDK8 且自动配置环境变量 [翻译]