高效编码JDK自带的命令行工具的使用还用不清楚的地方?快来看看这篇文章吧!!!

Posted 码农飞哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高效编码JDK自带的命令行工具的使用还用不清楚的地方?快来看看这篇文章吧!!!相关的知识,希望对你有一定的参考价值。

您好,我是码农飞哥,感谢您阅读本文!如果此文对您有所帮助,请毫不犹豫的一键三连吧。小伙伴们有啥想看的,想问的,欢迎积极留言告诉我喔。 上一篇文章我们介绍了IDEA的调试技巧【高效编码】关于IDEA调试的点点滴滴都在此文了。领导看了都说好!!!!。开发工具的熟练使用可以有效提高我们的效率,但是这还不够,还有JDK我们也要熟悉起来。所以这一篇文章来了,它主要是讲述JDK自带的各种命令行工具的使用。也是属于操作类的文章,简单易懂,掌握之后受益良多。


在这里插入图片描述

总览

JDK自带的命令工具都在C:\\Program Files\\Java\\jdk1.8.0_60\\bin 这个目录下,即JDK安装目录的bin目录下,这个里面有各种命令行工具,有用来监控虚拟机运行的命令,有用来故障排查的命令,还有一些基础命令。
在这里插入图片描述
下图是对本文即将介绍了几个工具命令以及它们的作用做的一个汇总表格。一共有6个命令。后面会详细的介绍每个命令的使用。
在这里插入图片描述

下面就分别详细介绍一下各个命令的使用吧,话不多说,让我们直入主题。

准备工作

为了测试方便,我们先准备一个用于测试的java源文件(即以.java为后缀的文件),上传到服务器上。上传了一个User.java文件。放在了/data/server/test-xiang 这个目录下,目录没有的话可以自行创建(目录可以不用相同,但需要的是一个新目录,方便后面查看效果)。

javac

首先粉墨登场的是我们的javac命令,这个命令作用是用于Java语言编译器,即将Java 源文件(.java文件)编译成一个类文件(.class文件)。
它的用法是:

 javac <options> <source files>

用法非常简单,其中<options>是各种操作符,<source files> 是源文件。
可以通过javac -help命令查看各种操作符的功能描述。如下图所示:
在这里插入图片描述
举个栗子吧,就拿前面已经上传的User.java文件为例:

javac -g /data/server/test-xiang/User.java

执行该命令之后,我们看到该目录下生成了一个同名的User.class文件,这个文件就是我们源文件编译之后的类文件,所有的Java源文件必须先编译成类文件,才能被JDK执行。
在这里插入图片描述
在这里插入图片描述

javadoc

说完了javac命令之后,我们接下来看看javadoc命令,这个命令的作用就是生成API文档。其用法是:

javadoc [options] [packagenames] [sourcefiles] [@files]

其中,[options] 表示操作,[packagenames]表示包名,[sourcefiles]表示源文件(即.java文件) 同样的可以通过javadoc -help 查看各个操作的作用描述。
在这里插入图片描述
举个栗子:显示User.java中所有的public类和成员,生成相关的文档。

javadoc -public /data/server/test-xiang/User.java

执行该命令之后会生成如下文件:
在这里插入图片描述

javap

接下来介绍是javap 这个命令,这个命令的作用就是类文件反汇编器,主要是根据Java字节码文件反汇编为Java源代码文件。说白了,就是可以按需查看类文件的信息。其用法是:

javap <options> <classes>

<options> 是各种操作,<classes>是类文件, 同样的还是可以通过javap -help查看一下各种操作的解释吧!
在这里插入图片描述
举个栗子:比如我要显示类文件中所有公共成员(即被public修饰的方法和变量)

javap -public /data/server/test-xiang/User.class

在这里插入图片描述

jar

接下来介绍的是jar命令,这个命令的主要作用是创建和管理jar文件。它的用法是:

 jar {ctxui}[vfmn0PMe] [jar-file] 
 [manifest-file] [entry-point] [-C dir] files ...

{ctxui} 表示这一部分可以输入 c,t,x,u,i 中的一个。
[vfmn0PMe] 表示可以输入vfmn0PMe中的多个,比如输入 vf 表示答应压缩信息,并指定压缩文件名
[jar-file] 可以设置jar的文件名。
我们可以通过命令jar -help 查看各个选项的功能描述,如下图所示:
在这里插入图片描述
这里有一个非常清晰的描述, 比如-c 命令就是创建新jar包,-f 就是指定jar的名称
比如:将两个类文件归档到一个名为classes.jar的档案中,可以输入如下命令:

jar cvf classes.jar  Foo.class Bar.class

再比如:将文件夹下已经有了User.java 和User.class 两个文件打包到一个jar文件中,那么可以通过jar命令将这两个文件打包

 jar cvf test.jar  User.java User.class

在这里插入图片描述
执行命令之后,就可以看到目录下已经生成了一个名叫test.jar的文件。在对该文件进行解压看看,可以看到有User.jar文件和User.class文件。是不是非常的简单呀。

jar -xvf test.jar

在这里插入图片描述

java

接着就是介绍Java这个命令了,这个命令非常非常的重要,必须要画五角星重点掌握。这个命令的作用主要有两个。
一个是执行类(这里的类是指含有main函数的类),用法是:java [-options] class [args...]
一个是执行jar文件,用法是:java [-options] -jar jarfile [args...]
当然我们还可以通过java -help命令查看其他的操作命令。
在这里插入图片描述
举个栗子:

  • 直接执行主类,如下有这样一个有main方法的主类,该主类没有包名。
public class JavaOptionTest {

    public static void main(String[] args){
        System.out.println("测试java命令的执行");
    }
}

如果我们要想在linux下直接运行该类的话,只需要步:

  • 将源文件编译成类文件(.class文件)javac JavaOptionTest.java
  • 通过java命令执行main函数java JavaOptionTest
    在这里插入图片描述
    我们可以看到控制台打印出来我们期待的结果。
    那么问题来了,如果一个主类带有包名的话,那么该如何执行呢?首先需要进入包名所在父目录,就像下图中进入D:\\workspace\\java-base-demo\\target\\classes目录,然后带包名运行:
java com.jay.base.JavaOptionTest

在这里插入图片描述
在执行类中有的小伙伴可能会碰到类似这样的问题:

错误: 找不到或无法加载主类 com.jay.base.JavaOptionTest

这是因为在你当前的执行命令的目录下面找不到 com.jay.base这个路径,所以找不到JavaOptionTest类文件

  1. 执行jar包,如下在target目录下有一个springboot项目的jar直接通过java命令即可启动该项目。
 java -jar testng-spring-boot-demo-0.0.1-SNAPSHOT.jar

在这里插入图片描述

延伸阅读

直接通过java命令启动jar包的话,有个问题就是当窗口连接关闭之后服务也就停了,即这样启动不是后台启动应用的。要想在后台启动服务还是需要通过nohup命令来启动服务
标准的启动命令是:

nohup java -jar testng-spring-boot-demo-0.0.1-SNAPSHOT.jar &

指定端口,指定运行内存的启动命令是:

nohup java -Xms1024m -Xmx2048m  -jar testng-spring-boot-demo-0.0.1-SNAPSHOT.jar --server.port=9393 &

这个命令表示指定初始堆内存(Xms)为1024mb,最大内存是2048mb,启动端口是9393。这样执行的话会在执行命令的目录下生成一个 nohup.out文件记录启动日志。当然我们也可以指定一个文件记录启动日志,如下命令:

nohup java -Xms1024m -Xmx2048m  -jar testng-spring-boot-demo-0.0.1-SNAPSHOT.jar --server.port=9393 > log.file 2>&1 &

就指定生成了log.file文件来记录启动日志。
在这里插入图片描述

总结

本文详细介绍了基础部分的各种命令行工具,作为一个Java程序猿熟练的掌握这些命令的使用还是很有必要的,我觉得这里最最重要的命令是java命令。希望本文对读者朋友们有所帮助。

以上是关于高效编码JDK自带的命令行工具的使用还用不清楚的地方?快来看看这篇文章吧!!!的主要内容,如果未能解决你的问题,请参考以下文章

使用JDK自带的工具将中文转换为ascii码

如何使用JDK自带jvisualvm监控工具

使用 keytool(jdk自带工具)获取 SHA1

原来jdk自带了这么好玩的工具 > jinfo 使用教程

6 款 Java 8 自带工具,轻松分析定位 JVM 问题

6 款 Java 8 自带工具,轻松分析定位 JVM 问题