首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java文件是怎么编译Class文件

其实就是我们前端的编译过程,是通过javac(编译器)把java文件变成.class字节码文件。...上述这段代码生成的抽象语法树如下( IDEA JDT AstView 插件可以查看抽象语法树): 上述抽象语法树在Java使用com.sun.tools.javac.tree.JCTree类来表示...5 Class File 解析 这个里面东西属实太多而且繁杂,大家有兴趣了可以看看我的JVM专栏里的纸质笔记 链接: JVM学习专栏 链接: JVM学习笔记-Class文件结构介绍——(纸质笔记)...链接: JVM学习笔记-Class文件结构-魔数,版本号,常量池——(纸质笔记) 链接: JVM学习笔记-Class文件结构-访问标志,类索引,父类索引,接口索引集合——(纸质笔记) 链接: JVM...学习笔记-Class文件结构-字段表,方法表集合——(纸质笔记) 链接: JVM学习笔记-Class文件结构-属性表集合——(纸质笔记)

1.3K20

JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)

一、前言 我们在日常学习中,对一个java代码有问题,不知道jvm内部怎么进行解析的时候;有个伟大壮举就是反编译,这样就可以看到jvm内部怎么进行对这个java文件解析的!...我们可以使用JDK自带的javap命令来进行反编译,反编译出来的如果看不太明白,可以使用Jad工具来配合使用。...二、编写java文件 public class JavaPTest { String string = new String("学") + new String("Java"); } 三、科补代码理解...五、执行javap命令 在IDEA的java类中按快捷键ctrl + f9编译class文件,为反编译做准备; 找到class文件的位置 来到此目录下,不用cd切换到这个目录了哈 输入...七、总结 这样我们就完成了class文件编译了,两种方法有利有弊,大家根据实际情况来进行反编译

4.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

.java编译成.class 与 .class编译成.java

了解下这两个文件类型:.java文件是给人看的,.class是给计算机看的。程序员编写的是.java文件,经编译后生成.class文件给计算执行。 相信这两句话很形象的说明了这两个文件的关系了。...1,首先反编译器就是jd-gui这个软件了,可以把jar包直接拖进这个软件就能够看到代码了。当然jd-gui不能编译.class文件。 2,怎么把.class转成.java文件呢?...新建的一个.java文件有.class的前提是要编译成功,比我常用的项目是maven工程,要先maven install编译才能生成“完整的”.class文件,单单保存是不行的,这里下面会有说明。...eclipse可以通过ctrl+shift+R,然后输入类名,可同时看到.class和.java文件。 4,怎么编译单个的java文件呢?...也就是在eclipse中虽然保存后有.class文件,但是不一定编译成功。

2.4K20

如何实现class文件的反编译java-decompiler 反编译工具

java-decompiler 反编译工具 Java Decompiler 是Java编译工具,可以对 Java 5 和更高版本的 class 文件进行反编译分析。...主旨内容 Java Decompiler是一项开源工具,Java Decompiler工具不仅可以实现反编译.class文件,将.class文件变为可以被我们阅读的.java文件,而且还可以对jar包进行反编译...,得到jar包中.class文件编译的.java文件。...打开官方文章,我们会发现这个工具已经已经很久没有更新了,到现在,2024年安装一个旧版本工具,不出意外会遇到很多兼容性问题,所以在本篇文章中,主要说明下在2024年使用这个工具可能存在的一些问题。...jar文件java的可执行文件,右键点击或双击下载后的jd-gui-1.4.0.jar文件即可运行该反编译工具,运行时可以看到咖啡的图标,传统Java=咖啡。

11810

javaclass文件_java class是什么意思

根据 Java 虚拟机规范,类文件由单个 ClassFile 结构组成: ClassFile { u4 magic; //Class 文件的标志 u2...高版本的 Java 虚拟机可以执行低版本编译器生成的 Class 文件,但是低版本的 Java 虚拟机不能执行高版本编译器生成的 Class 文件。...字面量比较接近于 Java 语言层面的的常量概念,如文本字符串、声明为 final 的常量值等。而符号引用则属于编译原理方面的概念。...上述这些信息中,各个修饰符都是布尔值,要么有某个修饰符,要么没有,很适合使用标志位来表示。而字段叫什么名字、字段被定义为什么数据类型这些都是无法固定的,只能引用常量池中常量来描述。...与 Class 文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写 入自己定义的属性信息

63130

Class文件结构(2)——用java代码实现解析Class文件

本文,我们编写JAVA程序来解析class文件,读者注意,阅读本文前先详细了解Class文件结构,可参考笔者前一篇文章:Class文件结构(1)—手动解析每一个字节,你看不懂 代码地址:https...先定义对应class文件结构中各项的类型,如常量池、字段表、方法表、属性表、U2、U4,再定义各项的解析器,并使用责任链模式完成class文件结构各项的解析工作。...使用ByteBuffer而不直接使用byte[]缓存读取的class文件内容是因为ByteBuffer能更好的控制顺序读取。...该class文件字节缓存与class文件结构各项解析器使用的是同一个缓存对象,都是从同一个class文件读取到内存中的ByteBuffer对象。...该属性不一定会编译class文件中,如果没有该属性,那么查看反编译后的java代码将会使用诸如arg0、arg1、arg2之类的名称代替局部变量的名称。

2.8K10

Java Class文件常量池

Class文件的存在使得不同语言编写的程序都可以运行在Java虚拟机上,只需要这些语言经过编译编译后的Class文件符合Java虚拟机定义的规范,Java虚拟机就可以加载执行这些Class文件。...Class文件的内容。...上面这张图是经过编译后的Class文件中的内容 魔数(magic)与版本号 Class文件开头固定的4个字节为魔数,唯一作用就是用来确定这个文件是否是一个能被虚拟机接收的class文件。...文件,但是不能运行以后版本的Class文件,通俗一点将就是向下兼容。...常量池中主要存放两大类常量: 字面量 符号引用 字面量主要指的是文本字符串、声明为final的常量值等 符号引用主要包含三类常量: 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符 Java代码在编译的时候不存在连接时

73720

Java .class文件是什么?

Java class文件是什么? java class 文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java类或者Java接口做出了全面描述。...无论Java class文件在何种系统上产生,无论虚拟机在何种操作系统上运行,对Java class文件的精确定义使得所有Java虚拟机都能够正确地读取和解释所有Java class文件。...如上图所示:可以使用其他语言来编写程序,然后将其编译class文件,或者把Java程序编译为另一种不同的二进制文件格式。...实际上,Java class文件的形式能够表示Java源代码中无法表达的有效程序,然而,绝大多数Java开发者几乎都会选择使用class文件作为传递给虚拟机的首要方式。...在运行时,Java虚拟机使用常量池的全限定名、方法和字段的描述符,把当前类或接口中的代码与其他类或接口中的代码连接起来。

2.9K20

Javaclass文件结构

class文件是一组以8位字节为基础单位的二进制流组成的。...大部分的文件都会使用魔数来进行文件识别,比如一般我们看到gif、jpeg等格式的文件就知道这是个图片。但是呢,程序识别文件类型却不是根据文件扩展名而是根据魔数来的。...class文件的魔数是0xCAFEBABE,Java虚拟机判断一个文件是否是class文件就是依靠此魔数进行的。...java虚拟机可以运行低于当前版本的class文件,但不能运行高于其版本的class文件。...没有使用的标志位和不符合条件的标志位一律为0 类索引 类索引占两个字节,指向常量池中的CONSTANT_Class_info类型的常量,这个类型的常量中包含一个指向全限定名常量项的索引。

64130

JavaJava编译错误:需要class,interface或enum

1.源代码 class FangFaDemo{ public static void main(String[] args){ int x = 1 , y = 2;...sum(x,y)); } } public static int sum(int a,int b){ return a+b; } 2.报错信息 3.问题分析 显示的是sum方法需要class...,重新检查了一下,发现是class的大括号没有把sum方法包括起来 4.问题解决 将大括号的位置更正即可成功编译 class FangFaDemo{ public static void main...sum(x,y)); } //原位置 public static int sum(int a,int b){ return a+b; } }//把原位置的大括号移动到这里来 编译结果...: 5.补充 class是类 interface是接口 enum是枚举 class等关键字需要首写小写 源文件中必须有一个public 的类名与文件名一致 发布者:全栈程序员栈长,转载请注明出处:https

1.8K40

Java Class文件格式详解

一、Class文件概述 Java编写的程序可以运行在许多平台上,平台无关性的基础是虚拟字节码和字节码存储格式,Java虚拟机不和Java语言强绑定,它只和Class文件打交道,即加载Class...至于编写的语言可以是Java、Colin甚至其它任何可以产生Class文件的语言。而Class文件对应的就是字节码的持久化表示。...学习Class文件格式有助于我们了解Java虚拟机类加载机制,从而加深对虚拟机的了解。 二、Class文件组成 接下来的分析都是基于JDK8环境,包括代码和具体的格式。 ?...、属性信息 具体格式: 先是2字节的属性个数; 接下来是具体的属性,每一项的格式如下: 名称 长度‍ 说明 名称索引 2 常量池中索引 属性长度 4 属性值 属性长度 常用的属性有: 属性名称 使用位置...三、解析代码 上面整个分析过程还是蛮抽象的,如果有兴趣的同学建议可以对着代码看加深理解,整个Class文件的解析主要在ClassFile这个类中,它的命名空间为com.sun.tools.classfile

82140

java class文件「建议收藏」

根据 Java 虚拟机规范,类文件由单个 ClassFile 结构组成: ClassFile { u4 magic; //Class 文件的标志...高版本的 Java 虚拟机可以执行低版本编译器生成的 Class 文件,但是低版本的 Java 虚拟机不能执行高版本编译器生成的 Class 文件。...字面量比较接近于 Java 语言层面的的常量概念,如文本字符串、声明为 final 的常量值等。而符号引用则属于编译原理方面的概念。...上述这些信息中,各个修饰符都是布尔值,要么有某个修饰符,要么没有,很适合使用标志位来表示。而字段叫什么名字、字段被定义为什么数据类型这些都是无法固定的,只能引用常量池中常量来描述。...与 Class 文件中其它的数据项目要求的顺序、长度和内容不同,属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格的顺序,并且只要不与已有的属性名重复,任何人实现的编译器都可以向属性表中写 入自己定义的属性信息

41830

Java核心技术》 Class文件结构开篇Class文件结构

JDK1.5编译的(JDK1.5:0x0031,JDK1.6:0x0032,JDK1.7:0x0033) 高版本的JDK可以向下兼容以前版本的Class文件,但是无法运行以后版本的Class文件,即使文件格式并未发生变化...如果使用JDK1.5运行使用JDK1.6编译Class文件,会报: java.lang.UnsupportedClassVersionError: Bad version number in .class...file 就是由于JDK1.6编译文件版本号超过了JDK1.5虚拟机所接受的范围 Java class文件是二进制文件。...为了便于理解它,JVM提供者提供了javap,反汇编器(编译,反编译的本质,是“映射”)。 一切皆是映射(光剑) 使用javap产生的结果是Java汇编语言。...官网文档: The Java Virtual Machine class file format class文件java虚拟机执行引擎的数据入口,也是java技术体系的基础支柱之一,了解class文件的结构对后面进一步了解虚拟机执行引擎有很重要的意义

57630
领券