二、Class文件

本文介绍了JVM与class文件的关系,以及如何查看class文件。通过IDEA的插件,可以查看16进制的class文件内容,识别魔数CAFEBABE。class文件包含魔数、版本号、常量池、访问标志、类信息、父类、接口、属性和方法等关键元素,常量池用于存储编译时确定的信息。此外,文章还提到了查看和理解class文件的工具和方法。
摘要由CSDN通过智能技术生成

一、概念

  • JVM相对于class文件来说,就像操作系统。class文件相对于JVM来说,就像汇编语言机器语言
  • 我们在写完一段java代码时候,其实简单的理解就是:java代码 -> class文件 -> jvm执行
  • class文件并没有改变我们写的java代码,仅仅是在“格式”上做了适配,目的就是让jvm“认识”并且执行
  • class文件是一个二进制文件

二、怎样去看一个class文件

方法一:使用IDEA插件BinED

在这里插入图片描述
通常我们看的都是16进制的,二进制没啥看的都是0和1。如下图是一个16进制的class文件
在这里插入图片描述
如上图:基本上所有的java代码转化成16进制,开头都是 “CA FE BA BE”,其实就是 Magic Number

方法二:IDEA安装jclasslib bytecode viewer插件

在这里插入图片描述
在这里插入图片描述

三、Class文件结构

其实通过IDEA去看一个class文件,能看出一个java类中所有的东西(构造方法,方法,属性等等,还有方法之间的调用关系等),比较重要的就是Class文件中包含了一个常量池,在编译期间就能确定很多东西。

Magic Number

魔数:其实就是看你这个文件是不是java文件

Minor Version 和 Major Version

简单理解为版本号

constant_pool_count

常量池数量(1~65536个),占用2个字节。

constant_pool

常量池:将我们的class文件翻译存储在常量池里面,方便以后使用
常量池中包含的内容:

  • 字面量:文本、字符串、final修饰的内容(这些都是在编译的时候已经定好了)
  • 符号引用:类、接口、字段、方法、一些明细信息(比如这个类叫做什么名字)

access_flags

用来判断当前java文件的修饰符是啥
ACC_PUBLIC、ACC_FINAL、ACC_SUPER、ACC_INTERFACE、ACC_ABSTRACT、ACC_SYNTHETIC、ACC_ANNOTATION、ACC_ENUM

this_class

当前的这个类是谁

super_class

当前类的父类是谁

interface_count

当前类实现的接口数量

interfaces

接口

fileds_count

当前类中的属性数量

fileds

当前类中的属性

methods_count

当前类中的方法数量

methods

当前类中的方法

attributes_count

额外/附加属性的数量

attributes

额外/附加属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值