首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    什么是Javac

    Javac 编译器的任务就是讲java语言规范转化成Java虚拟机语言规范,完成 “翻译工作” 什么是Javac Javac 是一种编译器,能将一种语言规范转化成另外一种语言规范。...那么回过头来,javac的编译器也是将Java这种对人非常友好的编程语言编译成对所有机器都非常友好的语言。注意,这种语言不是针对某个机器的,甚至包括不同种类,不同平台的机器。...如何系哦啊出不同种类,不同机器之间的差别,这个任务就由JVM来完成,而Javac的任务就是将Java源代码语言先转化成JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言...如下图所示,javac的任务就是将java源码编译成Java字节码,也就是JVM能够识别的二进制码。

    1.7K30

    模拟Javac命令

    在前一篇关于Javac编译器文章发布后,公众号后台有小伙伴留言问我javac命令是如何将java文件变成class文件的,我们能否实现一个这样的命令。...所以这篇文章的目的就是以Mac操作系统为例来模拟Javac命令。...首先javac命令在JDK的/bin目录下,其实质可以认为是一个脚本,在Mac系统中javac是一个可执行的 Unix文件,这里我们自己简单制作一个Unix可执行文件。...关于加 "./" 才能运行这里简单的说明下,我们执行一条Linux命令,本质是在运行一个程序,比如我们运行 javac 命令,那么机器首先会去alias中查找命令的含义,然后去内置命令中查找,最后去环境变量的...知道命令是如何执行之后,我们来实现一个自己的javac命令吧。

    1.5K30

    Java编译原理(javac)

    源码文件编译成字节码文件(前端编译) 字节码文件被虚拟机加载以后编译成机器码(后端编译) 对于开发来说接触的一般都是第一个步骤也就是源码编译成字节码文件(class文件),第二个步骤开发几乎不会接触,因为这是虚拟机在运行过程中自己做的一些编译流程...词法分析主要由com.sun.tools.javac.parser.Scannaer类来实现。...上述抽象语法树在Java中使用com.sun.tools.javac.tree.JCTree类来表示,之后所有的操作均建立在抽象语法树之上。...int a = 1 + 2; 上述代码我们在语法树上可以看到字面量1、2以及操作符+,在经过常量折叠步骤以后,会生成一个新的字面量3,在程序运行时a的值就是3,不会再消耗CPU进行计算。...局部变量final类型的变量的不变性只能依靠编译来保证,这是因为局部变量在常量池中没有CONSTANT_Fieldref_info的符号引用,没有访问标志的信息,在运行期虚拟机并不确定局部变量是否是final

    3.4K10

    Java和Javac 命令行

    JAVA和JAVAC 命令行 javac和java命令行中的-classpath选项 这是个很基础的问题,但是因为基本上都是用现有的IDE工具 来开发java程序,所以很少有人意识到这一点。...javac -classpath,设定要搜索类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有在CLASSPATH里面的设定。...所以一个完整的javac命令行应该是这样的, 假设abc.java在路径c:\src里面,在任何的目录的都可以执行以下命令来编译。...javac -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip -sourcepath c:\source\project1\src;c:\source...windows下, 文件路径的分割符为反斜杠  \   类或者java文件列表的分割符为分号 ; 在linux下 文件路径的分隔符位斜杠 / 类或者java文件列表的分隔符为冒号 : 一个linux下编译和运行的例子

    85340

    Java底层-Javac编译器

    通常我们也叫Javac编译器为前端编译器,因为一个传统编译器编译结果是由源码到本地机器码的一个过程,而由于Javac编译器只负责源码到字节码这一步,所以叫前端编译器;字节码到本地机器码这一步是由后端运行时编译器来完成的...此外对于程序的优化也主要集中在后端运行时编译,这样可以使非Javac编译器产生Class文件(Scala,Groovy等语言的Class文件)也能享受到编译器优化的好处。...这一节主要来看Javac编译器,关于后端运行时编译器大家可以参考下之前写的的文章:Java的即时编译,这篇文章是很早以前看深入理解Java虚拟机书籍时候写的,后面可能会重新再整理一篇。...Javac编译是使用Java语言实现的,是不是很疑惑,用Java语言编写一个javac编译器去编译Java,那Javac的源码又是如何被编译执行的呢(好像鸡生蛋还是蛋生鸡的问题)?...在上一节我们提及到,汇编,C/C++在机器上都是无法直接运行的,需要使用运行编译器进行编译,而如果编译器不是使用机器语言实现肯定无法直接执行的, 所以最开始的编译器应该是使用0、1代码实现的,不用编译就可以运行

    2.6K30
    领券