class文件详解

1、基本概念

能够被JVM识别,加载并执行的文件格式

2、生成class文件

1、通过IDE自动帮我们build
2、手动通过javac去生成class文件(javac xxx.java)
可以直接通过IDE的 run或者通过java命令来执行class文件(java xxx)

3、class文件的作用

记录一个类文件中所有的信息

4、class文件的特点

class文件是一种8位字节的二进制流文件,各个数据按顺序紧密的排列,无缝隙(好处是减少文件的体积,让JVM加载class文件更快),每个类或者接口,枚举等都单独的占据一个class文件(好处是让每个类都可以单独管理自己内部的内容,无须相互交叉)。

5、class文件的结构

这里写图片描述
magic字段,它的类型是无符号4字节类型,是加密段,作用是给虚拟机来判断当前class文件是否被篡改过minor_version,表示当前class文件最小适配的jdk版本
major_version,表示生成class文件的jdk的版本
constant_pool_count,代表class文件中常量池的数量,通常来说是一个
constant_pool,常量池
access_flags,表示我们当前的class文件的作用域标志,比如说我们的class文件是public类型还是public final类型等等
this_class,当前类
super_class,java虚拟机会默认帮我们填充当前类的父类
interfaces_count,直接继承的接口的数量
interfaces,接口
fields_count,成员变量的数量
fields,成员变量(包含了每个成员变量的name,所属的类,以及type)
methods_count,放法数
methods,方法(包含了每个方法的name,type,所属的类,access_flags等)
attribute_count,
attributes,主要是用来包含上面没有的内容,比如说:注解

access_flags的取值

这里写图片描述

constant_pool包含的内容

简单的constant_pool中的字段:CONSTANT_Integer_info,CONSTANT_Long_info,CONSTANT_String_info等等
比较复杂的constant_pool中的字段:
CONSTANT_Class_info,CONSTANT_Fieldref_info,CONSTANT_Methodref_info等等,这3分字段分别记录了当前类,类中field,类中method的相关信息,CONSTANT_Class_info还记录到了引用到的类的一些信息,这里面存储的都是索引,最终指向上面的简单的字段

可以使用010 builder来查看二进制文件的内容,所以当然也可以查看class文件,下载地址
这里写图片描述

6、class文件的弊端

1、内存占用大,不适合移动端
2、堆栈的加栈模式,加载速度慢
3、文件IO操作多,类查找慢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值