“当控制输出Hello world ! 的时候,代码在计算机内部经历了什么?Java代码在我们计算机上到底如何运行的?”
1.cmd运行.java文件
javac是java语言编程编译器。全称java compiler。
a.查看电脑上是否有Java的环境。
b.输入命令:javac Test.java编译过程。
注意:文件名和类名完全一致。
2. .java文件执行完毕生成.class文件
a.运行.class文件输入:java Test
运行报错:
经过一番百度错误原因:高版本的JDK编译的Java class文件在较低版本的JVM上运行,就会报此错误。
小编很慌张
查看了一下JDK的版本:
cmd->java -version:
果然不一样。果断下载java version 1.8。
成功运行:
3.JVM的作用
什么是JDK、JVM、JRE
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。
JVM(Java Virtual Machine),Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行,所以Java能够“一次编译,到处运行”。
JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。
4.Java代码的变异过程
编译原理。
此图来源及以下内容来源:
https://blog.csdn.net/fuzhongmin05/article/details/54880257
词法分析:读取源代码,一个字节一个字节的读进来,找出这些词法中我们定义的语言关键词如:if、else、while等,识别哪些if是合法的哪些是不合法的。这个步骤就是词法分析过程。从源代码中找出了一些规范化的token流,就像人类语言中,给你一句话你要分辨出哪些是一个词语,哪些是标点符号,哪些是动词,哪些是名词。
语法分析:就是对词法分析中得到的token流进行语法分析,这一步就是检查这些关键词组合在一起是不是符合Java语言规范。如if的后面是不是紧跟着一个布尔型判断表达式。形成一个符合Java语言规定的抽象语法树,抽象语法树是一个结构化的语法表达形式,它的作用是把语言的主要词法用一个结构化的形式组织在一起。这棵语法树可以被后面按照新的规则再重新组织。
语义分析:语法分析完成之后也就不存在语法问题了,语义分析的主要工作就是把一些难懂的,复杂的语法转化成更简单的语法。就如难懂的文言文转化为大家都懂的百话文,或者是注释一下一些不懂的成语。将复杂的语法转化为简单的语法,对应到Java就是将foreach转化为for循环,还有一些注释等。最后生成一棵抽象的语法树,这棵语法树也就更接近目标语言的语法规则。
字节码生成:将会根据经过注释的抽象语法树生成字节码,也就是将一个数据结构转化为另外一个数据结构。就像将所有的中文词语翻译成英文单词后按照英文语法组装文英文语句。代码生成器的结果就是生成符合java虚拟机规范的字节码。
说明:设计编译原理和JAVA虚拟机,我了解的不多,还得继续学习呀。谢谢大家。
联系客服