什么是Javac

原创 2018年04月16日 15:05:35

Javac 编译器的任务就是讲java语言规范转化成Java虚拟机语言规范,完成 “翻译工作”

什么是Javac

Javac 是一种编译器,能将一种语言规范转化成另外一种语言规范。通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范。如c,c++或者汇编语言都是讲远吗直接编译成目标机器码,这个目标机器码是CPU直接执行的指令集合。这些指令集合也就是底曾的一种语言规范,机器能够直接识别这种识别这种语言规范,但是人不可能直接去写目标机器码。虽然这种机器码执行起来非常搞笑,但是对人太不友好了, 开发这个代码的成本往往远高于剩下的机器的执行成本。

从某种意义上来说,有了编译器才有了程序语言的繁荣,因为片一起是人类和机器沟通的一个纽带。那么回过头来,javac的编译器也是将Java这种对人非常友好的编程语言编译成对所有机器都非常友好的语言。注意,这种语言不是针对某个机器的,甚至包括不同种类,不同平台的机器。如何系哦啊出不同种类,不同机器之间的差别,这个任务就由JVM来完成,而Javac的任务就是将Java源代码语言先转化成JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。所以这样看来,Java语言向开发者屏蔽了很多与木鳖机器相关的细节,使得Java语言的执行和平台无关,这也就成就了java语言的繁荣。

如下图所示,javac的任务就是将java源码编译成Java字节码,也就是JVM能够识别的二进制码。从表面上看就是.java文件转成.class文件,而实际上是将Java的源代码转化成了一连串二进制数字,这些二进制数字是有格式的,只有JVM能够正确识别它们到底表达了什么意思。
这里写图片描述

Javac编译器的基本结构

回忆一下,如何才能编译程序呢?
1.词法分析。在读取源码时候,一个字节为一节读进来,找出这些字节中有哪些是我们规定的语法关键词,如if else for while 等,要识别哪些if是合法的关键词,哪些不是,这个步骤就是词法分析过程。
2.语法分析。检查这些关键词组合在一起是不是符合java语言规范,如在if的后面是不是紧跟着一个布尔判断表达式。与英语中,句子要有主谓宾一样,都有才算语法正确。
3.语义分析。如果通过语法分析,但是语义是否正确呢?语义分析的主要工作是把一些难懂的,复杂的语法转化为更加简洁的语法,江浙步骤对应到我们人类的语言中,就是讲难难懂的文言文转化为大家都能懂得白话文,或者注解一下一些成语,便于人们更好滴理解。
语义分析的结果就是讲复杂的语法转化成最贱的语法,对应到java中,如将foreach转成for虚幻结构,还有注解等,最后形成一个注解过后的抽象语法树,这棵语法树更接近目标语言的语法规则。
4.最后,通过字节码生成器生产字节码,根据经过注解的抽象语法树生产字节码,也就是讲一个数据结构转化为另一个数据结构,就像将所有中文词语翻译成英文单词后,按照英文语法组装成英文句子。
这里写图片描述
Javac 的各个模块完成了将Java源代码转化成Java字节码的任务,所以javac主要就有4个模块
分别是词法分析器、语法分析器、语义分析器和代码生成器。

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

Java千百问_08JDK详解(007)_javac是什么

点击进入_更多_Java千百问1、javac是什么javac即Java编程语言编译器,位于jdk/bin目录下,读取使用Java编程语言编写的源文件(.java),并编译成字节码类文件(.class)...
  • ooppookid
  • ooppookid
  • 2016-06-18 08:38:56
  • 3202

java和javac的基本用法

如题,首先我们在桌面,开始->运行->键入cmd 回车,进入windows命令行。进入如图所示的画面:可知,当前默认目录为C盘Users文件夹下的Administrator文件夹。一般而言,我们习惯改...
  • vxkangkang
  • vxkangkang
  • 2016-04-20 10:27:39
  • 843

既然读文件要使用和文件编码一致的编码,那么javac编译文件也需要读取文件,它使用什么编码呢?

这个问题从来就没想过,也从没当做是什么问题。正是因为问题一而引发的思考,其实这里还是有东西可以挖掘的。下面分三种情况来探讨,这三种情况也是我们常用的编译java源文件的方法。        1....
  • congcongsuiyue
  • congcongsuiyue
  • 2014-12-26 17:41:15
  • 752

是谁说的jdk/jre/bin里面有javac.exe的[JDK配置]

杂家现在大三小技术宅。于2年前,2012年刚过完年开始接触JAVA,当时倒是mw要求安装JDK。。。这是背景 杂家话了两样时间下载及配置JDK,结果,硬是只见到JAVA测试成功,javac一直都是“非...
  • lsh670660992
  • lsh670660992
  • 2014-02-22 22:47:15
  • 1693

classpath设置、javac/java执行class问题

回想起还在学校的时候,那时学习Java基本上都是用工具的,比方说Eclipse、MyEclipse等。工具用多了,一旦脱离工具 才发现 成了废材。所以有空之余弄了下JDK下编译和运行。 有关JDK与...
  • vtopqx
  • vtopqx
  • 2012-12-05 22:41:37
  • 4791

javac.exe、 java.exe、 java虚拟机三者之间的区别与联系

JDK中 javac:Java编译器,将Java源代码换成字节代; java:Java解释器,直接从类文件执行Java应用程序代码; 先编译  *.java文件――――>*.class文...
  • cs408
  • cs408
  • 2015-10-11 20:54:30
  • 1582

DOS框下运行javac中文显示乱码

问题描述: DOS框下运行javac中文显示乱码 解决方案: Windows RegistryEditor Version 5.00 [HKEY_CURRENT_USER\Consol...
  • yangcs2009
  • yangcs2009
  • 2013-03-06 20:09:46
  • 2881

cmd中javac 和 java的用法

对于初学者而言, cmd中的javac和java是一个很难得的问题。下面我来具体的说明一下。 首先安装jdk和jre:下载jdk最新版,根据提示安装即可。 然后配置java环境变量: JAVA_HOM...
  • miracle_8
  • miracle_8
  • 2016-05-22 15:24:06
  • 3924

使用java、javac命令行编译工程以及遇到的问题

转载: ubuntu下使用java、javac命令行编译工程命令行使用javac及java编译、运行java程序出现的问题自己动手编译、运行Java程序一、java和javac命令行1、javac命...
  • xx326664162
  • xx326664162
  • 2016-06-14 17:29:04
  • 4150

javac 编译源文件时指定编码格式

javac编译,编码乱码
  • tgyman
  • tgyman
  • 2017-03-04 17:03:17
  • 2160
收藏助手
不良信息举报
您举报文章:什么是Javac
举报原因:
原因补充:

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