展开

关键词

什么是Javac

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

37430

模拟Javac命令

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

34030
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

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

    Javac:command Not Found

    I have been getting well on with my java tool.However When I use the javac command.It says 1 javac :

    99630

    scrapy在cmd检查

    2,fetch('http://gk.scsn.gov.cn/Search.aspx?columnId=40012')

    18830

    cmd如何退出Python

    cmd如何退出Python      (1)在命令行上输入exit()      (2)在命令行上输入quit() 好像还有一种方法是在命令行上输入Ctrl+Z,再按回车,但是我一直成功不了, ?

    40610

    Java编译原理(javac)

    词法分析主要由com.sun.tools.javac.parser.Scannaer类来实现。 上述抽象语法树在Java中使用com.sun.tools.javac.tree.JCTree类来表示,之后所有的操作均建立在抽象语法树之上。 符号表中信息可以用在语义分析过程的检查和产生中间代码 3. 注解处理器 注解处理器在编译期间对注解进行处理,可以读取、修改、添加抽象语法树的任意元素。 在标注检查的步骤还会实施常量折叠。 ,就会填充了所有信息的符号表交给com.sun.tools.javac.jvm.ClassWriter类,最后由该类的writeClass()方法输出字节码。

    23910

    Javac的实现过程

    主要介绍Javac的实现过程及原理。 首先弄明白什么是JavacJavac是一种编译器,将一种语言转换为另一种语言规范。 javac任务就是将java源代码转换为jvm能够识别的二进制码。将.java文件转换为.class文件,这些.class文件也就是字节码文件只有JVM能够识别。 ? (因为类除了自身的符号之后还有其他类的引用,所以要进行分类) (2)在未处理的符号列表,将所有类符号解析到各自的类符号,在MemberEnter.complete()类完成。 (解析语法树,将所有的符号都添加到符号表) 在Enter类解析的步骤,还有一个辅助操作: 添加默认的构造函数; 接着下一步是处理注解:在JavaProcessingEnvironment类完成; 按照JVM文件组织的形式将字节码输出到后缀名为class的字节码文件 整个业务流程: ?  关于javac的基本原理就介绍到这里,有兴趣的可以研究下Javac的源码,可以从OpenJdk下载到源码。

    69150

    javac 编译过程

    javac 编译过程 ? 一、解析与填充符号表: 1. 语法、词法分析: a) 语法分析:将源代码字符流转换为标记(Token:编译过程最小元素)集合。 b) 词法分析:根据标记序列构造抽象语法树(AST:用来描述程序代码语法结构的树形表示方式,每一个节点代表程序的一个语法结构。 2. 填充符号表: 一组符号地址和符号信息组成的表格。 二、注解处理器:    插入式注解处理器,编译期间处理注解,读取,修改,删除语法树的任意元素,编译器会根据修改与否,重新回到解析及符号表填充阶段进行处理。

    35620

    eclipse执行Ant脚本:Class not found: javac1.8

    最近把eclipse也升级到neon,java也同步升级到1.8,在eclipse执行很久之前写的ant脚本(build.xml)时报错了: Class not found: javac1.8 在命令行执行ant脚本是正常的,因为我的电脑中安装了java1.6,1.7,1.8,但默认的版本是1.6,我知道我的ant脚本中指定了生成目标版本(target)是1.6。 于是到http://ant.apache.org/bindownload.cgi下载了1.10.1,解压到本地后,如下图修改了eclipse的ant主目录参数,指定使用1.10.1。 ? 参考资料: 《Class not found: javac1.8”问题总结》 《 Could not find the main class: org.eclipse.ant.internal.launching.remote.InternalAntRunner

    47560

    Javac的实现过程

    主要介绍Javac的实现过程及原理。 首先弄明白什么是JavacJavac是一种编译器,将一种语言转换为另一种语言规范。 javac任务就是将java源代码转换为jvm能够识别的二进制码。将.java文件转换为.class文件,这些.class文件也就是字节码文件只有JVM能够识别。 ? (因为类除了自身的符号之后还有其他类的引用,所以要进行分类) (2)在未处理的符号列表,将所有类符号解析到各自的类符号,在MemberEnter.complete()类完成。 (解析语法树,将所有的符号都添加到符号表) 在Enter类解析的步骤,还有一个辅助操作: 添加默认的构造函数; 接着下一步是处理注解:在JavaProcessingEnvironment类完成; 按照JVM文件组织的形式将字节码输出到后缀名为class的字节码文件 整个业务流程: ?  关于javac的基本原理就介绍到这里,有兴趣的可以研究下Javac的源码,可以从OpenJdk下载到源码。

    23320

    JavaC++的赋值和拷贝分析及对比

    参考链接: 如何使用Python和其他语言(Java/C++/C)为变量赋值 一、内存  Java是在JVM所虚拟出的内存环境运行的。内存分为栈(stack)和堆(heap)两部分。  栈  &堆  在Java,JVM的栈记录了线程的方法调用。每个线程拥有一个栈。在某个线程的运行过程,如果有新的方法调用,那么该线程对应的栈就会增加一个存储单元,即帧(frame)。 在frame,保存有该方法调用的参数、局部变量和返回地址。  Java的参数和局部变量只能是基本类型的变量(比如int),或者对象的引用(reference)。 因此,在栈,只保存有基本类型的变量和对象引用。  引用所指向的对象保存在堆。 如果在类没有定义拷贝构造函数,编译器会自行定义一个。

    32730

    javac和java命令行的-classpath选项

    javac和java命令行的-classpath选项 这是个很基础的问题,但是因为基本上都是用现有的IDE工具 来开发java程序,所以很少有人意识到这一点 先来看几个小例子: 一、测试java命令的 2.将Hello.java文件拷贝到某个目录,假设目录为:d:/test1/src/com/cn/andy 3. windows环境进入到cmd,进入到d:/test1/src/com/cn/andy , 执行javac -d d:/test1/target Hello.java 此时target目录中将生成com/cn/andy/Hello.class 此处需要了解下面的命令: javac-d destdir 去掉则无法执行,此时如果执行java -classpath . com.cn.andy.Hello 则还可以正常执行 2、 同样,如果将d:/test1/target目录设置进classpath环境变量, 则在任意的目录执行javacom.cn.andy.Hello都可以正常执行 二、测试javac编译命令的-classpath参数 1.编写User.java ?

    5K40

    Python在windows CMD输出中文

    在windows CMD输出中文是比较烦的事情,最简单的就是增加一个windows.py,用的时候import一下: #!

    1.1K50

    cmd

    Alto)的启发,大量的 GUI 出现在 Apple Lisa、Atari ST、Sun Workstation、X Windows 以及其他公司的产品(包括 Microsoft Windows )

    19930

    linux下 Error running javac compiler

    4、然后重新执行脚本,又报错了: Error running javac compiler 翻译一下可能就是无法找到javac编译器。 百度搜了一下,终于在老外的网站找到了问题。

    91550

    系统提示javac:找不到文件

    错误如下图所示: 解决方法如下: 1、首先进入java文件所在的目录 2、进入目录后,再输入javac 文件名.java即可

    28330

    使用javac编译源码的过程

    使用javac编译源码的过程如下: 解析和填充符号表 包括解析包括词法分析和语法分析。 词法解析:将源代码的字符流(每个字符)转变为标记(token,比如int a=b+2包括6个标记)集合。

    17530

    Java和Javac 命令行

    JAVA和JAVAC 命令行 javac和java命令行的-classpath选项 这是个很基础的问题,但是因为基本上都是用现有的IDE工具 来开发java程序,所以很少有人意识到这一点。 javac -classpath,设定要搜索类的路径,可以是目录,jar文件,zip文件(里面都是class文件),会覆盖掉所有在CLASSPATH里面的设定。 所以一个完整的javac命令行应该是这样的, 假设abc.java在路径c:\src里面,在任何的目录的都可以执行以下命令来编译。 那么执行java -classpath c:\classes;c:\jar\abc.jar;c:\zip\abc.zip;com.cnblogs.jeffchen.main即可, 但是如果classpath包含多个 并且其他jar包也有com.cnblogs.jeffchen会发生什么情况?错误?

    7140

    相关产品

    • 腾讯云代码分析

      腾讯云代码分析

      腾讯云代码分析(TCAP),用心关注每行代码迭代、助您传承卓越代码文化!精准跟踪管理代码分析发现的代码质量缺陷、代码规范、代码安全漏洞、无效代码,以及度量代码复杂度、重复代码、代码统计。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券