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

模拟Javac命令

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

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

什么是Javac

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

1.2K30

JAVAC原理「建议收藏」

将命令行上指定的源文件进行读取,解析为语法树,然后将所有外部可见的定义都输入到编译器的符号表中 在编译的过程中会调用适当的注解处理器.如果在调用过程中,生成了新的资源文件或者类文件,则重新进行编译,直到没有新文件创建为止...类的成员是在第一次访问类的内容时输入的。这是通过在编译后的类的类符号中安装completer对象来实现的,编译后的类为对应的类树调用MemberEnter阶段。...因此,为了避免在没有执行注释处理的情况下不必要地解析和输入源文件,JavacProcessingEnvironment与概念模型执行“不同步”,同时仍然满足注解处理作为一个整体在实际编译之前发生的概念要求...Flow(数据流分析) 如果到目前为止还没有错误,则使用数据流分析对类进行分析。...数据流分析用于检查变量的确定分配和不可到达的语句,这可能导致额外的错误 TransTypes 使用TransTypes将泛型类型的代码转换为没有泛型类型的代码, Lower(强度削弱) “语法糖”是使用

89810

linux用yum安装jdk或yum组安装jdk只有java命令没有javac命令

打算写个helloworld试一试,写完后javac HelloWorld.java,报没有javac命令,首先echo $PATH一下,看下有没有jdk路径啥的,没问题,为啥没有所谓的dt.jar和tools.jar...检查了那么久,环境配置也设置个遍,一脸懵逼的看着没有dt.jar和tools.jar的文件夹,其实我也是想起来大牛说过,这种情况无非是被覆盖了,要分开装那两jar才有,好,那我再装一遍,yum groupinstall...openjdk-devel.x86_64 安装完了就去/usr/lib/jvm里看看,进去java-1.7.0-openjdk-devel.x86_64文件夹ll一下,发现有点不一样了,bin文件夹下ll一下,有java,还有javac...,cd到lib文件夹下ll,发现有dt.jar和tools.jar两个包,接下就是重新设置环境变量了,完了后能用java也能用javac了。...以上内容仅针对jdk 1.7安装时遇到的问题 以上只是本人没有找到最合适的解决办法,自己尝试了,亲测有用的做法,具体如果有什么问题也希望各位老司机、大牛指点迷津,小弟初学linux,望海涵 发布者:全栈程序员栈长

4.1K20

Java编译原理(javac)

前端编译 前端编译大致主要有以下流程: 对源文件进行词法分析产生字符流 对字符流进行语法分析产生抽象语法树 对语法树进行语义分析,确保语义正常 语义分析通过以后生成中间代码(字节码) 下面我们站在javac...词法分析主要由com.sun.tools.javac.parser.Scannaer类来实现。...上述抽象语法树在Java中使用com.sun.tools.javac.tree.JCTree类来表示,之后所有的操作均建立在抽象语法树之上。...局部变量final类型的变量的不变性只能依靠编译来保证,这是因为局部变量在常量池中没有CONSTANT_Fieldref_info的符号引用,没有访问标志的信息,在运行期虚拟机并不确定局部变量是否是final...4.2.2 字节码生成 字节码生成是javac编译的最后一个阶段。字节码生成阶段不仅仅是把各个步骤生成的信息转换成字节码写到磁盘,还进行了代码的添加和转换工作。

1.4K10
领券