class文件结构[4]

【参考链接】

深入理解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 versionmajorversion。如图表示是使用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一致

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值