
很多教程都是一开始简单的说下用javac编译HelloWorld.java,紧接着就是Eclipse等IDE的使用,然而学习者并不了解IDE背后的原理究竟是什么,只有真正弄懂了这些基础命令时,那么任何一款IDE都会得心应手。
前面的话
IDE各有不同,也各有优点,但背后的原理只有一个—那就是JDK。本文深度讲解了JDK基本命令的用法,让你不借助于任何IDE也完全可以完成开发的工作,这样,对于IDE的使用和JDK的原理有了更进一步的理解也会是将来使用任何一款IDE能够得心应手和底气十足的保证。
编译类文件——javac命令
一、javac命令的语法结构
javac [options] [sourcefiles] [@files]
- options: 命令行选项
- sourcefiles: 一个或多个要编译的源文件
- @files: 一个或多个对源文件进行列表的文件
二、传递源文件名的两种方法
- 使用[sourcefiles]: 如果源文件数量少,在命令行上列出文件名即可。
例如:javac MyClass1.java MyClass2.java
也可以使用通配符:javac MyClass*.java
- 使用[@files]: 如果源文件数量多,则将源文件名列在一个文件中,名称间用空格或回车行来进行分割。然后在javac命令行中使用该列表文件名,文件名前需加@字符。
例如:建立一个文件并命名为”@list.txt”,其中的内容如下:
MyClass1.java
MyClass2.java
MyClass3.java
执行javac @list.txt
三、传递带包名的源文件的方法
对于有包路径的类,可以用相对路径来表示,比如com下的Demo.java,可以使用如下命令编译:javac com\demo.java
四、命令选项
编译器有一批标准选项,目前的开发环境支持这些标准选项,将来的版本也将支持它。还有一批附加的非标准选项是目前的虚拟机实现所特有的,将来可能要变化。非标准选项以-X打头。
以下3个是设置路径的选项:
-classpath (类路径):设置用户类路径,它将覆盖CLASSPATH环境变量中的用户类路径。若既未指定CLASSPATH又未指定-classpath,则用户类路径由当前目录构成。
-d (编译生成文件目标目录):设置类文件的目标目录。如果某个类是一个包的组成部分,则javac将把该类文件放入反映包名的子目录中,必要时[需手工]创建目录。
例如:如果指定-d c:\demo 并且该类名叫com.Demo,那么类文件就叫C:\demo\mypackage\HelloWorld.class。若为指定-d选项,则javac将把类文件放到与源文件相同的目录中。-sourcepath (源路径):指定用以查找类或接口定义的源代码路径。与用户类路径一样,源路径选项用分号进行分割,它们可以是目录、jar归档文件或zip归档文件。如果使用包,那么目录或归档文件中的本地路径名必须反映包名。
Tip:通过classpath(类路径)查找类,如果找到了其源文件,则可能会自动被重新编译。
例如,我们可以使用这3个属性来将源码、classpath和目标路径分开
javac -d classes -sourcepath src -classpath classes;lib\Banners.jar \src\farewells\GoodBye.java
这样,就会把src目录下的代码编译到classes目录下,并引用classpath中的类。
以下5个是设置编译属性和性能的选项:
- -deprecation:显示每种不鼓励使用的成员或类的使用或覆盖的说明。如果没有给出-deprecation选项的话,javac将显示这类源文件的名称,这些源文件使用或覆盖不鼓励使用的成员或类。
- -encoding:设置源文件指定的编码,例如EUCJIS/SJIS。若未指定-encoding选项,则使用平台默认的转换器。
- -g:生成所有的调试信息,包括局部变量。在默认情况下,只生成行号和源文件信息。
- -nowarn:禁用警告信息。
- -verbose:冗长输出。它包括了每个所加载的类和每个所编译的源文件的有关信息。
除了以上几个常用的选项之外,还有一些联编选项和非标准选项(以
-X开头的选项),这些选项不太常用,需要的读者可以查阅Java文档。
更多内容请参考如下链接:
运行类文件——java命令
下面分5个方面来讲解java命令的使用
一、java命令的语法结构
java [options] class [argument]
java [options] -jar file.jar [argument]
- options:命令行选项
- class:要调用的类名
- file.jar:要调用的jar文件名,只与-jar一起使用
- argument:传给main函数的参数
二、执行一个类文件
执行类文件时,只需要指定类文件的全名即可,全名中包含包名,包路径使用.表示。
例如:编译package\HelloWorld.class类,执行的命令如下:java mypackage.HelloWorld
三、执行一个jar包
执行jar包时,该包中的MENIFEST.MF文件中必须指定当前包中哪个类是主类,即指定执行入口类,使用属性为Main-Class。
执行方式如下:
java -jar HelloWorld.jar
四、命令选项
java命令有一组标准选项,当前的运行时环境支持这些选项并且将来的版本也将支持它们。还有一组其它的非标准选项是特定于目前的虚拟机实现的,将来可能要有变化。非标准选项以-X开头。
- -classpath (类路径):指定类的环境变量,同javac中的-classpath选项。
-cp (类路径):指定一个用于查找类文件的列表,它由目录、jar归档文件和zip归档文件组成。类路径用分号
;分割。指定-classpath或-cp将覆盖CLASSPATH环境变量的所有设置。Tips:如果不使用-classpath和-cp,且没有设定CLASSPATH,则用户类路径由当前目录
.构成。-D (属性=值):设置系统属性的值。例如:
-D hello=world,这样在Java类中就可以取得系统属性hello的值world。- -jar:执行封装在jar归档文件中的程序。第一个参数是jar归档文件的名称而不是启动类名。启动类由Main-Class清单头指定。jar文件是所有用户类的源,其它的用户类路径设置将被忽略。
除了以上的几个常用选项外,还有一些以-X开头的非标准选项,用以对执行时的环境进行设置。最常用的是对Java虚拟机的堆大小进行设置,以提高Java运行的内存和运行效率。例如-Xms256m -Xmx256m -XX:NewSize=128m -XX:MaxNewSize=128m,Xms代表默认启动大小,Xmx代表最大大小,NewSize是新建对象的大小,MaxNewSize是新建堆运行增长的最大值,它决定了何时将新的对象置为旧的对象。
在进行Tomcat系统部署时,默认的内存大小为56MB,而通常我们可能需要更多的内存,此时就可以在Tomcat启动命令后使用该参数。Tomcat也是通过java命令来执行一个Java类来启动的。
五、给类传递参数
在Java的命令中还有一个变量argument,该变量用于向目标类main()函数传递输入参数,多个参数用空格分隔。例如:
java mypackage.HelloWorld AAA BBB
在mypackage.HelloWorld的main方法中就可以通过args变量来取得该参数:
1 | public static void main(String args[]) { |
类文件打包——jar命令
JAR工具是一个Java应用程序,可将多个文件合并为单个JAR归档文件。JAR是个多用途的存档及压缩工具,它是基于ZIP和ZLIB压缩格式。然而,设计JAR的主要目的是便于将Java Applet或应用程序打包成单个归档文件。将Applet或应用程序的组件(.class文件、图像和声音)合并成单个归档文件时,可以用Java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载,而不是对每个组件都要求一个新连接,这大大缩短了下载时间。JAR还能压缩文件,从而进一步提高了下载速度。此外,它允许Applet作者对文件中的各个项进行签名,因而可认证其来源。
一、jar命令的语法结构
jar {ctxu}[vfm0M][jar-文件][manifest-文件][-C 目录] 文件名
二、{ctxu}属性
其中{ctxu}是jar命令的子命令,每次jar命令只能包含ctxu中的一个,它们分别表示如下:
- -c:创建新的jar文件包
- -t:列出jar文件包的内容列表
- -x:展开jar文件包的指定文件或者所有文件
- -u:更新已存在的jar文件包(添加文件到jar文件包中)
三、[vfm0M]选项
[vfm0M]选项可以任选,也可以不选,它们是jar命令的选项参数。
- -v:生成详细报告并打印到标准输出
- -f:指定jar文件名,通常这个参数是必需的
- -m:指定需要包含的MANIFEST清单文件
- -0:只存储,不压缩,这样产生的jar文件包会比不用该参数产生的体积大,但速度更快
- -M:不产生所有项的清单(MANIFEST)文件,此参数会忽略-m参数
四、参数
其它参数的意义如下:
- [JAR文件]:即需要生成、查看、更新或者解开的JAR文件包,它是-f参数的附属参数
- [manifest 文件]:即MANIFEST清单文件,它是-m参数的附属参数。
- [-C 目录]:表示转到指定目录下去执行jar命令的操作。它相当于先使用cd命令转到该目录下再执行不带-C参数的jar命令,它只能在创建和更新JAR文件包的时候可用。
- 文件名:指定一个文件/目录列表,这些文件/目录就是要添加到JAR文件包中的文件/目录。如果指定了目录,那么使用jar命令打包的时候会自动把该目录中的所有文件和子目录打入包中。
五、示例
例1:jar cf HelloWorld.jar mypackage
该命令是将mypackage中的文件打包,没有执行过程的显示,执行结果是在当前目录生成了HelloWorld.jar 文件,如果当前目录已存在HelloWorld.jar ,那么该文件将会被覆盖。
例2:jar cvfm HelloWorld.jar manifest.mf mypackage
根据当前目录中的manifest.mf 并将详细报告输出,其中manifest.mf中的内容如下:
Main-Class: mypackage.HelloWorld
Tip:在冒号后需要有一个空格
例3:jar tf HelloWorld.jar
在HelloWorld.jar 已经存在的情况下,可以查看HelloWorld.jar 中的内容。
例4:jar xvf HelloWorld.jar
将HelloWorld.jar解压到当前目录并显示解压缩的详细信息。
生成API文档——javadoc命令
一、javadoc命令的语法结构
javadoc [命令选项][包名][源文件名][@files]
其中:
- [包名]为用空格分隔的一系列包的名字,包名不允许使用通配符,如
*。 - [源文件名]为用空格分隔的一系列的源文件名,源文件名可包括路径和通配符
- [@files]是以任何次序包含包名和源文件的一个或多个文件
二、命令选项
javadoc 命令选项包括如下几种可选属性
- -overview<文件> :读取HTML文件的概述文档。
- -public :仅显示公共类成员
- -protected :显示受保护/公共类和成员(默认)
- -package :显示软件包/受保护/公共类和成员
- -private :显示所有类和成员
- -help :显示命令行的选项并退出
- -doclet<类> :通过替代doclet生成输出
- -docletpath<路径> :指定查找doclet类文件位置
- -sourcepath<路径列表> :指定查找源文件的位置
- -classpath<路径列表> :指定查找用户类文件的位置
- -exclude<软件包列表> :指定要排除的软件包的列表
- -subpackages<子软件包列表> :指定要递归装入的子软件包
- -breakiterator :使用BreakIterator计算第1句
- -bootclasspath<路径列表> :覆盖引导类加载器所装入的类文件的位置
- -source<版本> :提供与指定版本的源兼容性
- -extdirs<目录列表> :覆盖安装的扩展目录的位置
- -verbose :输出有关Javadoc正在执行的操作的消息
- -locale<名称> :要使用的语言环境,例如en_US
- -encoding<名称> :源文件编码名称
- -quiet :不显示状态消息
- -J<标志>:直接将<标志>传递给运行时系统
三、示例
例1:
javadoc mypackage\*.java -d javadoc
该命令用于将mypackage包下的类生成api文档,输出目录为javadoc,执行该命令后会输出一系列的执行记录。
结束语
关于jdk基本命令用法还需要不断地应用和实践,谢谢!