JAVA 基础之 Class文件详解《未完》

原创 2018年04月15日 11:27:09

Class文件详解

什么是Class文件

基本概念

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

谁能生成class文件?

  • Java语言
  • Scala语言
  • Python语言
  • 其他语言

其实不止class文件,很多语言都行(最终将class文件交给JVM执行)

如何生成一个class文件

  • 通过IDE自动帮我们build
  • 手动通过javac去生成class文件
  • 通过 java命令去执行class文件

class文件的作用


  • 记录一个类文件的所有信息记住所有!

也就是为什么我们没声明 this super 却可以调用的原因

class文件格式的详解

  • 一种8位字节的二进制流文件
  • 各个数据按顺序紧密的排列,无间隔
  • 每个类、接口、枚举 等 都单独占据一个class文件

class文件结构

class文件中定义了这么多字段,java虚拟机就可以找到每个class文件中的内容

类型 名称 数量 作用
u4(无符号四字节) magic 1 加密段,文件是否被篡改过
u2 minor_verstion 1 最小适配的JDK版本
u2 major_verstion 1 表示当前class是用哪个jdk版本生成的
u2 constant_pool_count 1 当前class常量池数量
cp_info constant_pool constant_pool_count - 1 真正的常量池(结构体类型)
u2 access_flags 1 作用域标志(public private等 四大权限)
u2 this_class 1 java虚拟机生成的时候补充了this字段,用于调用
u2 super_class 1 与上同理
u2 interfaces_count 1 只记录当前类,直接继承的接口(而不会递归)
u2 interfaces interfaces_count
u2 fields_count 1 当前class文件中 所有的成员变量数
field_info fields fields_count 包含每个成员变量的name,类型
u2 methods_count 1 当前方法数量
method_info methods methods_count 方法name,类型,所属的类等
u2 attribute_count 1 类的属性相关的(上面字段没包含的内容,比如注解)
attribute_info attributes attribute_count

access_flags的取值范围

这里写图片描述

constant_pool

简单的类型(不仅仅只有这几种)

  • CONSTANT_Interger_info
  • CONSTANT_Long_info
  • CONSTANT_String_info

复杂一点的

这些只是存储了一些索引
- CONSTANT_Class_info
:类相关的信息,当前类的名字,包括引用到得类的一些信息
- CONSTANT_Fieldref_info
:记录我们当前字节码中得成员变量
- CONSTANT_Methodref_info
: 记录我们当前字节码中得方法

用工具分析

010Editor

链接:https://pan.baidu.com/s/1S7Baniq-CBu_VPOetpyYgg 密码:xaj8

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30889373/article/details/79947737

Win32汇编教程二 Win32汇编程序的结构和语法

Win32汇编程序的结构和语法--------------------------------------------------------------------------------Win32...
  • ghj1976
  • ghj1976
  • 2000-12-15 08:34:00
  • 2787

《Java虚拟机原理图解》 1.1、class文件基本组织结构

本文以图解的形式讲述class文件的基本组织结构,让你轻松掌握class文件 的整体结构~~...
  • u010349169
  • u010349169
  • 2014-10-09 14:06:04
  • 17408

深入理解Java Class文件格式(九)

经过前八篇关于class文件的博客, 关于class文件格式的内容也基本上讲完了。 本文是关于class文件格式的最后一篇。 在这篇博客中, 将会讲解关于方法的几个属性。 理解这篇博客的内容, 对于理...
  • brave2211
  • brave2211
  • 2014-03-29 01:40:17
  • 6727

Java中.class文件的结构

原文地址:http://blog.sina.com.cn/s/blog_67fcf49e0101hxfp.html 学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号,说“...
  • u012643122
  • u012643122
  • 2015-06-16 17:58:01
  • 853

Java Class文件结构解析 及 实例分析验证

Class文件是JVM执行引擎的数据入口,也是Java技术体系的基础构成之一;下面我们详细了解Class文件:先对Class文件结构有个大体了解,并了解Class文件结构里的一些名称定义;而后再详细说...
  • tjiyu
  • tjiyu
  • 2016-12-25 18:57:21
  • 4502

深入理解Java Class文件格式(七)

本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍。 本文将会继续介绍class文件中未讲解的信息。 先回顾一下上面一篇文章。 在上一篇博客中, 我们介绍了: this_class...
  • brave2211
  • brave2211
  • 2014-03-25 22:51:01
  • 5025

java class文件结构(二)

Java类文件是Java程序的二进制表示形式。每一个类文件代表一个类或者接口。不可能在一个类文件中放入多个类或者接口。这样就使得无论类文件是在哪一种平台上生成,都可以在任何主机上执行。 一、什么...
  • zhang434
  • zhang434
  • 2013-12-31 21:44:04
  • 506

Java反射获取Class文件对象3种方法

测试类: public class TestClass { public static void main(String[] args) throws Exception { Student s...
  • Xiaodongge521
  • Xiaodongge521
  • 2017-04-14 18:38:49
  • 108

Class文件中的常量池详解(下)

NO9.类中引用到的field字段在常量池中是怎样描述的?(CONSTANT_Fieldref_info, CONSTANT_Name_Type_info)      一般而言,我们在定义类的过程中...
  • wangtaomtk
  • wangtaomtk
  • 2016-09-11 22:27:05
  • 616

《Java基础与案例开发详解》(六)

注解 注解表现形式 注解类型和注解的区别 Java中预定的注解 自定义注解 注解默认值 对注解进行注解 Target 程序元素类型 Retention Documented Inherited ...
  • venus321
  • venus321
  • 2017-10-11 14:35:15
  • 139
收藏助手
不良信息举报
您举报文章:JAVA 基础之 Class文件详解《未完》
举报原因:
原因补充:

(最多只允许输入30个字)