Javac--Java编程语言编译器

2016-02-19 12:30 4 1 收藏

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

【 tulaoshi.com - 编程语言 】

       SYNOPSIS[提要]

Javac [options] [sourcefiles] [@files]

oldjavac [options] [soUCefiles] [@files]

参数可疑位任意顺序

options

命令行选项

sourcefiles

一个或多个原文件

@files

一个或多个列有原文件列表的文件

DESCRIPTION[说明]

javac工具读由java编程语言编写的类(class)和接口(interface)的定义,并将它们编译成字节代码的class文件

有两种将原文件名传递给javac的方法

* 文件数量教少,可简单将文件名列在命令行上

* 文件数量较多,将文件名列在一个文件中,文件名用空格(包括tab)或换行隔开.将该文件前加"@"字符后,使用javac编译

原文件必须有.java后缀名,类(class)文件必须以.class为后缀名.原文件和类文件必须有定位该类的根文件名(即,去掉后缀的文件名).例如: 一个命名为MyClass的的类,原文件名应为MyClass.java,该原文件将被编译成字节代码的名为MyClass.class的类文件.

嵌套类(inner class)的定义将产生附加的类文件.这些类文件的文件名由外部类名(outer class names)和嵌套类名合并而成. 例如, MyClass$MyInnerClass.class

你应该将原文件放置在能反应它们package tree的目录下.例如,假如你将所有的原文件放置在/workspace目录下,com.mysoft.mypack.MyClass类的原文件(即 .java文件)应该为/workspace/com/mysoft/mypack/MyClass.java

[对Windows: 以上应为.例如你将所有的原文件放置在c:workspace目录下,com.mysoft.mypack.MyClass类的原文件应为c:workspacecommysoftmypackMyClass.java ]

缺省情况下,编译器将把类文件(.class文件)放置到和原文件(.java)相同的目录下.你可以通过使用-d选项指定目标目录(见选项的说明)

查找类型

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

当编译一个文件时,编译器通常需要关于它暂时无法鉴别的类型的信息. 编译器需要每一个在文件中使用的,extened或implemented的类或接口的类型信息. 它包括在文件中没有明显提级的,但是有可能通过继续来提供信息的类或接口.

例如: 当你继续java.applet.Applet,你同时也使用了Applet类的祖先:java.awt.Panel,

java.awt.Container,java.awt.Component和java.awt.Object.

当编译器需要类型信息时,它寻找定义了类型信息的原文件或类文件.编译器首先寻找boottrap和extension类(这些除非你使用编译器选项,否则不需要关心),接着查找用户的类路径,用户的类路径通过CLASSPATH环境变量或使用命令行选项-classpath来定义.(细节,请看*设置Class Path*),假如使用-sourcepath命令行选项,编译器将在该路径下查找原文件,否则编译器将在用户类路径下同时查找类文件和原文件. 你可以通过使用-bootclasspath和-extdirs命令行选项来设置不同的bootstrap和extension类;见下面的Cross-Compilation options

一次成功的查找将找到一个类文件,原文件或两者.下面是javac如何处理每一种情况

*查找找到一个类文件(.class文件)但无原文件(.java文件): javac使用了类文件

*查找找到一个原文件但无类文件: javac将编译该原文件,然后使用生成的类文件

*查找找到两者: javac判定类文件是否过期.假如类文件过期,javac将重新编译原文件并将使用更新后的类文件.否则,javac将使用该类文件(没有过期)

缺省情况下,javac通过比较原文件和类文件的更改日期来判定类文件是否过期.( -Xdepend选项提供了一个慢一些,但是更可靠的方法)

主意: javac将默默(不输出信息)地:-)编译那些没有在命令行上指定的文件.使用-verbose选项可以来跟踪自动编译过程.

[FILELIST]文件列表

为使javac的命令行短小或更简单,你可以指定一个或多个文件,这些文件每行含有一个文件名.在命令行,在这些文件前使用'@'字符来指定它们是文件列表.当javac碰到一个的名开头为"@",它将认为在该文件中的文件名为需要处理的文件的名子

例如: 你可以将所有的原文件列在一个名为sourcefile的文件中.这个文件可能如此:

MyClass1.java

MyClass2.java

MyClass3.java

你可以通过


(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1601037.html

延伸阅读
C++编译器如何实现异常处理 原著:Vishal Kochhar 翻译:局部变量 原文出处:How a C++ compiler implements exception handling 译者注: 本文在网上已经有几个译本,但都不完整,所以我决定自己把它翻译过来。虽然力求信、雅、达,但鉴于这是我的第一次翻译经历,不足之处敬请谅解...
一,概述。 1995年,美国Sun Microsystems公司正式推出。(java好像就是爪哇,这个地方咖啡好, 程序员喜欢咖啡,金州注释)具有安全、跨平台、面向对象、简单、适用于网络等显著 特点(尤其是跨平台,可以说是伟大啊,想想windows编写的程序能够不做修改就直接拿 到UNIX系统上运行吗?估计不行,哈哈,但是java可以。金州注释。) 工作原理:j...
  在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程...
在很多Java应用中需要在程序中调用Java编译器来编译和运行。但在早期的版本中(Java SE5及以前版本)中只能通过tools.jar中的com.sun.tools.javac包来调用Java编译器,但由于tools.jar不是标准的Java库,在使用时必须要设置这个jar的路径。而在Java SE6中为我们提供了标准的包来操作Java编译器,这就是javax.tools包。使用这个包,我们可以不用...
  Java 启动器 java 将初始化 Java 虚拟机。虚拟机随即按以下顺序搜索和加载类: 自举类 - 构成 Java 平台的类,包括 rt.jar 和 i18n.jar 中的类。 扩展类 - 使用 Java 扩展机制的类。它们被捆绑为 .jar 文件,位于扩展目录中。 用户类 - 开发人员和第三方定义的类,不使用扩展机制。在命令行上使用 -classpath 选项(常用方法)或使用...

经验教程

688

收藏

87
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部