Java类文件结构(Class文件)
来源:互联网 发布:迪卡侬14.9背包知乎 编辑:程序博客网 时间:2024/06/15 15:36
今天学了一点关于类文件结构(class文件)的知识。
JVM的出现,使得大量的生成类文件结构的语言出现和发展(如Go,Scala等)。将我们编写的程序编译成二进制的本地机器码(C/C++使用的)变得不在是唯一的选择。
JVM是不关心class文件是来源是何种语言。它只与class文件这一特定的二进制文件有关。class文件是一组以8位字节(64bit)为基础单位的二进制数据流。流中的数据是严格按照顺序来的,中间是没有任何的分隔符的。class文件的格式是有点像C语言中的结构体来存储数据的。这种结构只有两种数据类型:无符号数和表。
这个例子是展示了class文件的具体内容
代码:
package www.wq.ch02;public class TestClass {private int m;public int inc(){return m+1;}}
接着我们尝试着在命令行窗口中使用javap指令来查看class文件;
C:\Users\Administrator>d:D:\EclipseProject\JavaProjects\JVMtest\bin\www\wq\ch02>javap TestClass警告: 二进制文件TestClass包含www.wq.ch02.TestClassCompiled from "TestClass.java"public class www.wq.ch02.TestClass { public www.wq.ch02.TestClass(); public int inc();}D:\EclipseProject\JavaProjects\JVMtest\bin\www\wq\ch02>javap -verbose TestClass警告: 二进制文件TestClass包含www.wq.ch02.TestClassClassfile /D:/EclipseProject/JavaProjects/JVMtest/bin/www/wq/ch02/TestClass.class Last modified 2016-1-14; size 377 bytes //这里显示了文件的大小 MD5 checksum 82a4906fb62922198bab5d1c1ae4cfc0 Compiled from "TestClass.java"public class www.wq.ch02.TestClass minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_SUPERConstant pool: //这里显示的是常量池 #1 = Class #2 // www/wq/ch02/TestClass #2 = Utf8 www/wq/ch02/TestClass #3 = Class #4 // java/lang/Object #4 = Utf8 java/lang/Object #5 = Utf8 m #6 = Utf8 I(这是大写的i) #7 = Utf8 <init> #8 = Utf8 ()V #9 = Utf8 Code #10 = Methodref #3.#11 // java/lang/Object."<init>":()V #11 = NameAndType #7:#8 // "<init>":()V #12 = Utf8 LineNumberTable #13 = Utf8 LocalVariableTable #14 = Utf8 this #15 = Utf8 Lwww/wq/ch02/TestClass; #16 = Utf8 inc #17 = Utf8 ()I #18 = Fieldref #1.#19 // www/wq/ch02/TestClass.m:I #19 = NameAndType #5:#6 // m:I #20 = Utf8 SourceFile #21 = Utf8 TestClass.java{ public www.wq.ch02.TestClass(); descriptor: ()V flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: invokespecial #10 // Method java/lang/Object."<init>":()V 4: return LineNumberTable: line 3: 0 LocalVariableTable: Start Length Slot Name Signature 0 5 0 this Lwww/wq/ch02/TestClass; public int inc(); descriptor: ()I flags: ACC_PUBLIC Code: stack=2, locals=1, args_size=1 0: aload_0 1: getfield #18 // Field m:I 4: iconst_1 5: iadd 6: ireturn LineNumberTable: line 6: 0 LocalVariableTable: Start Length Slot Name Signature 0 7 0 this Lwww/wq/ch02/TestClass;}SourceFile: "TestClass.java"D:\EclipseProject\JavaProjects\JVMtest\bin\www\wq\ch02>
下面这个结构图向我们详细的展示了Class类文件的结构:
0 0
- Java类文件结构(Class文件)
- Java Class类文件结构
- java Class类文件结构
- java Class类文件结构
- JAVA Class类文件结构
- Java Class文件结构
- Java Class文件结构
- java class文件结构
- Java Class文件结构
- Java Class文件结构
- java class文件结构
- java class文件结构
- java class文件结构
- Java Class文件结构
- java class文件结构
- java虚拟机Class类文件的结构
- Java虚拟机中的Class类文件结构
- java虚拟机 Class类文件的结构
- 职业规划
- 1019 General Palindromic Number
- ios 9.2xcode7.2下批量打渠道包
- 关于fork()函数父子进程之间的问题
- 算法导论第三版习题6.3
- Java类文件结构(Class文件)
- CM给hive添加自定义jar包
- 毁灭程序员的15个障碍
- 【leetcode】【8】String to Integer (atoi)
- 数据分析学习
- 修改ssh 配置 取消 使用dns
- leetcode之Binary Search Tree Iterator
- 第一行代码-9.4 服务的生命周期
- 插入排序