【JavaSE】javac 命令讲解

来源:互联网 发布:和视频软件 编辑:程序博客网 时间:2024/05/29 03:24

命令结构

javac [ options ] [ sourcefiles ]|[ @files ]

参数可按任意次序排列。

options

命令行选项。

sourcefiles

一个或多个要编译的源文件(例如 MyClass.java)。

@files

一个或多个对源文件进行列表的文件。

结构说明

该命令实际上由两部分组成。

1.需要被编译的源文件。

有两种方法可将源代码文件名传递给 javac:

如果源文件数量少,在命令行上列出文件名即可(可以为相对路径,也可以为绝对路径)。

如果源文件数量多,则将源文件名列在一个文件中,名称间用空格或回车行来进行分隔。然后在 javac 命令行中使用该列表文件名,文件名前冠以 @ 字符。

2.可选项。

可选项包括编译后的class文件存放路径、编译源文件所依赖的外部类(可以为class文件,也可以为java文件)、编译源文件所依赖的JDK自举类和扩展类等等。

常用可选项如下:

-classpath 类路径

设置用户类路径,它将覆盖 CLASSPATH 环境变量中的用户类路径。若既未指定 CLASSPATH 又未指定 -classpath,则用户类路径由当前目录构成。

-d 目录

设置生成的类文件的存放目录。如果某个类是一个包的组成部分,则 javac 将把该类文件放入反映包名的子目录中,必要时创建目录。

例如,如果指定 -d c:\myclasses 并且该类名叫 com.mypackage.MyClass,那么类文件就叫做c:\myclasses\com\mypackage\MyClass.class。若未指定 -d 选项,则 javac 将把类文件放到与源文件相同的目录中。

-sourcepath 源路径

指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。

-s 目录

指定存放生成的源文件的位置。这个选项很有意思,编译后应该生成class文件,为什么还会生成源文件呢?官方文档是这么说的:

Specify the directory where to place generated source files. The directory must already exist; javac will not create it. If a class is part of a package, the compiler puts the source file in a subdirectory reflecting the package name, creating directories as needed. For example, if you specify -s /home/mysrc and the class is called com.mypackage.MyClass, then the source file will be placed in /home/mysrc/com/mypackage/MyClass.java.
另外网上有这样的解说:
这个玩意儿可用在java注解处理器生成新的文件中,具体的请结合javax.annotation.processing这个包的作用看下。我的理解就是通过在源码中配置注解处理器,根据相应的注解处理器生成部分代码。 
所以这个选项应该很少用到。

-bootclasspath 自举类路径

根据指定的自举类集进行联编。和用户类路径一样,自举类路径项用分号 (;) 进行分隔,它们可以是目录、JAR 归档文件或 ZIP 归档文件。默认为$JAVA_HOME\jdk\jre\lib目录

-extdirs 目录

根据指定的扩展目录进行联编。目录是以分号分隔的目录列表。在指定目录的每个 JAR 归档文件中查找类文件。默认为$JAVA_HOME\jdk\jre\lib\ext目录

关于类型查找(依赖查找)

当编译源文件时,编译器常常需要它还没有识别出的类型的有关信息。对于源文件中使用、扩展或实现的每个类或接口,编译器都需要其类型信息。这包括在源文件中没有明确提及、但通过继承提供信息的类和接口。

例如,当扩展 java.applet.Applet 时还要用到 Applet 的祖先类:java.awt.Panel 、 java.awt.Container、 java.awt.Component 和 java.awt.Object。

当编译器需要类型信息时,它将查找定义类型的源文件或类文件。编译器先在自举类及扩展类中查找,然后在用户类路径中查找。用户类路径通过两种途径来定义:通过设置 CLASSPATH 环境变量或使用 -classpath 命令行选项。如果使用 -sourcepath 选项,则编译器在 sourcepath 指定的路径中查找源文件;否则,编译器将在用户类路径中查找类文件和源文件。

可用-bootclasspath 和 -extdirs 选项来指定不同的自举类或扩展类

简单的例子

JDK安装在D:\Program Files目录下,设置了PATH环境变量,但是没有设置CLASSPATH环境变量。

现在有一个类源文件如下:

package org.zzj.test;public class HelloWorld{public static void main(String[] args){System.out.println("Hello world!");}}
注意包名是org.zzj.test。一般文件的存放路径应该与包名相对应。

将该源文件存放到E:\JavaTest\src\org\zzj\test目录下。

打开命令行窗口,切换到F盘下,运行如下命令:

F:\>javac E:\JavaTest\src\org\zzj\test\HelloWorld.java -d E:\JavaTest\bin
由于该类只依赖了JDK自举类,所以不必指定classpath。

生成的class文件路径:


自动创建了目录org/zzj/test

运行class文件:

F:\>java -classpath E:\JavaTest\bin org.zzj.test.HelloWorld
因为当前目录为F盘的根目录,并且又没有设置CLASSPATH,而需要运行的class文件位于另一个目录,所以需要指定classpath。

注意:类名必须使用全限定名






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 未成年犯有缓刑罪继续犯罪怎么办 英朗出现检修esc怎么办 照相时奖状拿反了怎么办 wps文档加密后忘记密码怎么办 wps表格文件密码忘记了怎么办 wps表格密码忘记了怎么办 发布的文案缩成一行怎么办 创维电视都是VIP怎么办 挂电视距离太远怎么办 电视离沙发太近怎么办 苹果6更新11.1卡怎么办 苹果升级变卡了怎么办 迅雷被资源举报无法加速怎么办 迅雷的敏感资源无法加速怎么办 迅雷下载敏感资源无法加速怎么办 换手机微信账户怎么办 拉链拉不合没有蜡怎么办 长杆烟斗头松动怎么办? 大王卡没流量了怎么办 晚上电视想看野外生存怎么办 假离婚后真离婚怎么办 苹果手机在车上不能充电怎么办 遥控钥匙打不开车门怎么办 苹果访问限制密码忘记了怎么办 苹果手机忘记访问限制密码怎么办 苹果忘记访问限制密码怎么办 苹果限制访问密码忘了怎么办 东奥会计书盗版怎么办 合同封印少盖一页怎么办 玩单机游戏屏幕输入不支持怎么办 汽车不小心陷进泥潭怎么办 招商银行信用卡激活电话换了怎么办 冲鼻子是耳朵进水了怎么办 不小心点了赞怎么办 小车间太热了怎么办 在车间上班好热怎么办 英雄杀四星李逵不拉仇恨怎么办 手表玻璃里面有雾水怎么办 dw手表玻璃碎了怎么办 手表玻璃面花了怎么办 有个窝囊的父母怎么办