学而实习之 不亦乐乎

java和javac命令使用详解

2020-08-02 11:18:02

系统:windows10
环境:JDK 11

一、java命令

运行字节码文件;由java虚拟机对字节码进行解释和运行。要执行的类中必须有入口函数 main() 函数(注意大小写)。

用法:
执行一个类,注意:java命令后面跟的是要运行的类的类名,而不是文件名。
java [options] <mainclass> [args...]

执行一个jar文件
java [options] -jar <jarfile> [args...]

执行一个module
java [options] -m <module>[/<mainclass>] [args...]
java [options] --module <module>[/<mainclass>] [args...]    

执行一个源文件程序(时期JDK版本,只能先生成class文件才能执行,JDK11之后,可以直接运行java文件)
java [options] <sourcefile> [args]
       
注意
1.[options]和[args...]的位置。不要把[options]放到主类、jar文件、module和源文件的后面,因为它们后面跟的参数是要传给主类的 main() 函数的。
2.注意分割符号,Windows和Linux是不同的,windows下面常用“;”,而Linux下常用“:”.

常用OPTIONS(其他可参考java -help 命令):

-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
--class-path <目录和 zip/jar 文件的类搜索路径>
使用 ; 分隔的, 用于搜索类文件的目录, JAR 档案和 ZIP 档案列表。

-p <模块路径>
--module-path <模块路径>...
用 ; 分隔的目录列表, 每个目录都是一个包含模块的目录。

--upgrade-module-path <模块路径>...
用 ; 分隔的目录列表, 每个目录都是一个包含模块的目录, 这些模块用于替换运行时映像中的可升级模块

--add-modules <模块名称>[,<模块名称>...]
除了初始模块之外要解析的根模块。<模块名称> 还可以为 ALL-DEFAULT, ALL-SYSTEM,ALL-MODULE-PATH.

--list-modules    列出可观察模块并退出
-d <module name>
--describe-module <模块名称>
描述模块并退出

--dry-run     创建 VM 并加载主类, 但不执行 main 方法。
此 --dry-run 选项对于验证诸如模块系统配置这样的命令行选项可能非常有用。

--validate-modules
验证所有模块并退出--validate-modules 选项对于查找模块路径中模块的冲突及其他错误可能非常有用。

-D<名称>=<值>    
设置系统属性

-verbose:[class|module|gc|jni]    
启用详细输出

-version      将产品版本输出到错误流并退出
--version     将产品版本输出到输出流并退出
-showversion  将产品版本输出到错误流并继续
--show-version 将产品版本输出到输出流并继续
--show-module-resolution 在启动过程中显示模块解析输出

-? -h -help 将此帮助消息输出到错误流
--help        将此帮助消息输出到输出流
-X            将额外选项的帮助输出到错误流
--help-extra  将额外选项的帮助输出到输出流

-enableassertions[:<程序包名称>...|:<类名>]
按指定的粒度启用断言

-da[:<程序包名称>...|:<类名>]
-disableassertions[:<程序包名称>...|:<类名>]
按指定的粒度禁用断言

-esa | -enablesystemassertions
启用系统断言
另请参阅 -agentlib:jdwp=help

-agentpath:<路径名>[=<选项>]
按完整路径名加载本机代理库

-javaagent:<jar 路径>[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument

-splash:<图像路径>
使用指定的图像显示启动屏幕
自动支持和使用 HiDPI 缩放图像(如果可用)。应始终将未缩放的图像文件名 (例如, image.ext)作为参数传递给 -splash 选项。将自动选取提供的最合适的缩放一个或多个包含选项的参数文件

-disable-@files    阻止进一步扩展参数文件
允许类依赖于此发行版的预览功能

要为长选项指定参数, 可以使用 --<名称>=<值> 或 --<名称> <值>。

二、javac命令

将Java源文件编译成.class文件。

用法: javac <options> <source files>

其中, 可能的选项包括:
@<filename>                  从文件读取选项和文件名
有两种方法可将源代码文件名传递给 javac: 
1.如果源文件数量少,在命令行上列出文件名即可。
2.如果源文件数量多,则将源文件名列在一个文件中,名称间用空格或回车行来进行分隔。然后在 javac 命令行中使用该列表文件名,文件名前冠以 @ 字符。

-Akey[=value]                传递给注释处理程序的选项
--add-modules <模块>(,<模块>)*
    除了初始模块之外要解析的根模块; 如果 <module>为 ALL-MODULE-PATH, 则为模块路径中的所有模块。
--boot-class-path <path>, -bootclasspath <path>
    覆盖引导类文件的位置
--class-path <path>, -classpath <path>, -cp <path>
指定查找用户类文件和注释处理程序的位置
    
-d <directory>               指定放置生成的类文件的位置
-deprecation                 输出使用已过时的 API 的源位置
--enable-preview             启用预览语言功能。要与 -source 或 --release 一起使用。
-encoding <encoding>         指定源文件使用的字符编码
-endorseddirs <dirs>         覆盖签名的标准路径的位置
-extdirs <dirs>              覆盖所安装扩展的位置
-g                           生成所有调试信息
-g:{lines,vars,source}       只生成某些调试信息
-g:none                      不生成任何调试信息
-h <directory>               指定放置生成的本机标头文件的位置
--help, -help, -?            输出此帮助消息
--help-extra, -X             输出额外选项的帮助
-implicit:{none,class}       指定是否为隐式引用文件生成类文件
-J<flag>                     直接将 <标记> 传递给运行时系统

--limit-modules <模块>(,<模块>)*
限制可观察模块的领域
--module <module-name>, -m <module-name>
只编译指定的模块, 请检查时间戳
--module-path <path>, -p <path>
指定查找应用程序模块的位置
--module-source-path <module-source-path>
指定查找多个模块的输入源文件的位置
--module-version <版本>        指定正在编译的模块版本

-nowarn                      不生成任何警告
-parameters                  生成元数据以用于方法参数的反射
-proc:{none,only}            控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...]
要运行的注释处理程序的名称; 绕过默认的搜索进程
--processor-module-path <path>
指定查找注释处理程序的模块路径
--processor-path <path>, -processorpath <path>
指定查找注释处理程序的位置
-profile <profile>           请确保使用的 API 在指定的配置文件中可用
--release <release>          针对特定 VM 版本进行编译。支持的目标: 6, 7, 8, 9, 10, 11
-s <directory>               指定放置生成的源文件的位置
-source <release>            提供与指定发行版的源兼容性
--source-path <path>, -sourcepath <path>
指定查找输入源文件的位置
--system <jdk>|none          覆盖系统模块位置
-target <release>            生成特定 VM 版本的类文件
--upgrade-module-path <path>
覆盖可升级模块位置
-verbose                     输出有关编译器正在执行的操作的消息
--version, -version          版本信息
-Werror                      出现警告时终止编译