所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

Java源程序如何变成Java字节码?

发布时间:2020-04-15 16:12:56

资讯分类:源程序  字节码  java  语法  剖析  注解
Java源程序如何变成Java字节码?

java源程序是开发人员编写的后缀名为.java的文件,而java字节码文件是经过javac编译器编译之后计算机能认识的后缀名为.class的文件。

javac做了些什么?

主要由4个模块组成

词法剖析器:识别java中的if,else,for,while等关键字及其语句的合法性,构成符合标准的Token流。

语法剖析器:对构成的Token流进行语法剖析,检查它们构成的组合是否符合java语法标准,构成抽象的语法树。

语义剖析器:将foreach,注解等杂乱的语法转换成最简单的语法,构成注解往后的语法树。

字节码生成器:将注解往后的语法树翻译成字节码。


Java源程序如何变成Java字节码?

编译器默认都会将java文件变成字节码,让电脑看的懂手动的话就用cmd javac xxxx.java 编译

Java源程序如何变成Java字节码?

这就用到了jdk的工作原理了。jdk可以将写好的java文件编译成class文件,只要在安装了jre的机器上就能运行

Java源程序如何变成Java字节码?

java源程序变成字节码文件,其实就是java源程序的一个编译过程,就好比你想做成一件事,你必须要有做成这件事的能力,在java源程序转化为字节码的时候,也必须要有这个能力的工具才能完成,对于我们这些学java的人来说,要跑一个代码,就必须要有个环境 jvm(java虚拟机),其次,你还要配置环境变量,为什么要配置环境变量呢?这就是重点了,就是java源程序变成java字节码的重点,因为配置了环境变量,我们变异的时候才能去找到javac这个编译工具,java代码的编译都必须靠这个编译工具。

运行 javac 命令的过程,其实就是 javac 编译器解析 Java 源代码,并生成字节码文件的过程。

说白了,其实就是使用 javac 编译器把 Java 语言规范转化为字节码语言规范。javac 编译器的处理过程可以分为下面四个阶段

第一个阶段:词法、语法分析。在这个阶段,JVM 会对源代码的字符进行一次扫描,最终生成一个抽象的语法树。简单地说,在这个阶段 JVM 会搞懂我们的代码到底想要干嘛。就像我们分析一个句子一样,我们会对句子划分主谓宾,弄清楚这个句子要表达的意思一样。

第二个阶段:填充符号表。我们知道类之间是会互相引用的,但在编译阶段,我们无法确定其具体的地址,所以我们会使用一个符号来替代。在这个阶段做的就是类似的事情,即对抽象的类或接口进行符号填充。等到类加载阶段,JVM 会将符号替换成具体的内存地址。

第三个阶段:注解处理。我们知道 Java 是支持注解的,因此在这个阶段会对注解进行分析,根据注解的作用将其还原成具体的指令集。

第四个阶段:分析与字节码生成。到了这个阶段,JVM 便会根据上面几个阶段分析出来的结果,进行字节码的生成,最终输出为 class 文件。

我们一般称 javac 编译器为前端编译器,因为其发生在整个编译的前期。

所以说通过javac编译器就可以将java源程序转化为字节码。

他的命令我也说一下,如果要单独编译一下这个源文件的话,直接在命令好执行

javac xxx.java 就可以,不过你要先进入到这个文件目录下面。好了,回答就到这里,还有你们采纳

Java源程序如何变成Java字节码?

1,前提是你安装的jdk的环境变量,这方面资料也很多。

2,方法还是很多的,常见的简单的方法就是

2.1打开windows命令,javac 源程序即可;

2.2如果你开了工具eclipse,idea等,源程序编译过后和字节码文件一般在classes文件中,找到就可以了。当然背后的机制还是把源程序放到虚拟机在一番加工处理后的结果,想要了解这些就要关注他们的处理逻辑,可以查下这方面的资料,还是很复杂的,这里就不唠叨了。

Java源程序如何变成Java字节码?

编程语言


在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language)。编程语言(Programming Language)分为低级语言(Low-level Language)和高级语言(High-level Language)。


机器语言(Machine Language)和汇编语言(Assembly Language)属于低级语言,直接用计算机指令编写程序。


而C、C++、Java、Python等属于高级语言,用语句(Statement)编写程序,语句是计算机指令的抽象表示。


举个例子,同样一个语句用C语言、汇编语言和机器语言分别表示如下:


计算机只能对数字做运算,符号、声音、图像在计算机内部都要用数字表示,指令也不例外,上表中的机器语言完全由十六进制数字组成。最早的程序员都是直接用机器语言编程,但是很麻烦,需要查大量的表格来确定每个数字表示什么意思,编写出来的程序很不直观,而且容易出错,于是有了汇编语言,把机器语言中一组一组的数字用助记符(Mnemonic)表示,直接用这些助记符写出汇编程序,然后让汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。

但是,汇编语言用起来同样比较复杂,后面,就衍生出了Java、C、C++等高级语言。


什么是编译

上面提到语言有两种,一种低级语言,一种高级语言。可以这样简单的理解:低级语言是计算机认识的语言、高级语言是程序员认识的语言。


那么如何从高级语言转换成低级语言呢?这个过程其实就是编译。


从上面的例子还可以看出,C语言的语句和低级语言的指令之间不是简单的一一对应关系,一条;语句要翻译成三条汇编或机器指令,这个过程称为编译(Compile),由编译器(Compiler)来完成,显然编译器的功能比汇编器要复杂得多。用C语言编写的程序必须经过编译转成机器指令才能被计算机执行,编译需要花一些时间,这是用高级语言编程的一个缺点,然而更多的是优点。首先,用C语言编程更容易,写出来的代码更紧凑,可读性更强,出了错也更容易改正。


将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序的过程就是编译。负责这一过程的处理的工具叫做编译器


现在我们知道了什么是编译,也知道了什么是编译器。不同的语言都有自己的编译器,Java语言中负责编译的编译器是一个命令:

javac是收录于JDK中的Java语言编译器。该工具可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。

当我们写完一个文件后,我们可以使用命令来生成文件,这个类型的文件是JVM可以识别的文件。通常我们认为这个过程叫做Java语言的编译。其实,文件仍然不是机器能够识别的语言,因为机器只能识别机器语言,还需要JVM再将这种文件类型字节码转换成机器可以识别的机器语言。


我是一个资深程序员,如果想要Java基础到高级的全部资料也可以私信关注我回复数字1,即可免费获取

Java源程序如何变成Java字节码?

编译器默认都会将java文件变成字节码让电脑看的懂

手动的话就用cmd javac xxxx.java 编译

想了解更多Java相关,百度搜索圈T社区www.aiquanti.com,免费视频教程。纯干货

Java源程序如何变成Java字节码?

通过jvm编译

Java源程序如何变成Java字节码?

直接在命令提示符中输入

javac 源程序类名.java ,执行完之后会生成class文件,这个文件就是字节码文件

Java源程序如何变成Java字节码?

java源程序就是一般用java写的代码,后缀为.java。经过java的解释器转为java字节码,后缀为.class。

java是高级语言,同时也是跨平台的语言。所以运行时会在java虚拟机上,也称JVM。它介于操作系统和java解释器之间。它能够识别java解释器翻译后的字节码,然后JVM在不同平台上运行成为机器码,让计算机执行程序。



Java源程序如何变成Java字节码?

通过java编译器,java编译器就是将. java文件编译为.class的字节码文件,该字节码文件便可以被java虚拟机执行

Java源程序如何变成Java字节码?

通过eclipse编写的java代码执行会自动生成.class文件,写给就是java的字写码。

Java源程序如何变成Java字节码?

源码是函数实现的原理,实现原理都在具体类里,这就牵涉到具体的算法以及数据结构

api只负责告诉你这个函数是用来做什么的,参数是啥,参数类型是啥

源码是如何通过计算机实现的,这就牵涉到jvm,java虚拟机,把java源码编译成字节码,

源代码 到机器码

java垃圾回收机制

存储机制

https://www.cnblogs.com/chanshuyi/p/jvm_serial_04_from_source_code_to_machine_code.html

当源代码转化为字节码之后,其实要运行程序,有两种选择。一种是使用 Java 解释器解释执行字节码,另一种则是使用 JIT 编译器将字节码转化为本地机器代码。

这两种方式的区别在于,前者启动速度快但运行速度慢,而后者启动速度慢但运行速度快。至于为什么会这样,其原因很简单。因为解释器不需要像 JIT 编译器一样,将所有字节码都转化为机器码,自然就少去了优化的时间。而当 JIT 编译器完成第一次编译后,其会将字节码对应的机器码保存下来,下次可以直接使用。而我们知道,机器码的运行效率肯定是高于 Java 解释器的。所以在实际情况中,为了运行速度以及效率,我们通常采用两者相结合的方式进行 Java 代码的编译执行。

Java源程序如何变成Java字节码?

有一个东西,叫编译器,Java的源码被编译器编译以后,就成了包含有字节码的文件了,对于JVM来说,它只认识字节码后就可以执行了。

所以,Java源程序是 经由编译器 编译之后,成了字节码了。

留言与评论(共有 0 条评论)
   
验证码:
Top