Java命令简易入门-2:javac与java命令之一(javac)

说明:

  1. 前两个命令用来查看当前命令行下执行的javac与java是什么版本的。

  2. 编译当前目录下的HelloWorld.java文件并在当前路径下生成HelloWorld.class

  3. 启动JVM载入HelloWorld这个主类,从而运行该Java程序。再次强调一下java HelloWorld中的HelloWorld是类名而不是文件名。

注意:一个系统上可能有多个javac与java命令文件。可以使用where javacwhere java查看系统中的相应的文件。

命令输出截图如下:

在这里插入图片描述

2. javac的其他常用参数


这里只介绍几个常用的参数。

-d <directory>:在指定目录(directory)下生成相应的.class文件

-verbose:输出有关编译器正在执行的操作的消息。

现在想将编译生成的.class文件自动放在d:\testjava下,如何实现呢?

del *.class

del d:\testjava*.class

javac -d d:\testjava HelloWorld.java

dir *.class

dir d:\testjava*.class

说明:

  1. del *.class将当前目录下所有.class文件删除,del d:\testjava\*.classd:\testjava\目录下所有.class文件删除。

  2. 编译当前目录下的HelloWorld.java并将生成的.class文件放到d:\testjava目录。注意:d:\testjava可以不用事先建立,该条命令会自动建立。

  3. dir *.class查看当前目录下的.class文件,发现什么都没有

  4. dir d:\testjava\*.class,查看d:\testjava\目录下的所有.class文件。

命令输出截图如下:

在这里插入图片描述

再来看看-verbose参数

javac -verbose HelloWorld.java

输出信息如下:

D:\test>javac -verbose HelloWorld.java

[语法分析开始时间 SimpleFileObject[D:\test\HelloWorld.java]]

[语法分析已完成, 用时 12 毫秒]

[正在加载/modules/jdk.internal.jvmstat/module-info.class]

[正在加载/modules/java.security.jgss/module-info.class]

[正在加载/modules/jdk.internal.ed/module-info.class]

[正在加载/modules/java.xml.crypto/module-info.class]

[正在加载/modules/java.base/module-info.class]

[正在加载/modules/java.scripting/module-info.class]

[正在加载/modules/jdk.security.jgss/module-info.class]

[正在加载/modules/java.rmi/module-info.class]

[正在加载/modules/jdk.jfr/module-info.class]

[正在加载/modules/jdk.dynalink/module-info.class]

[正在加载/modules/jdk.security.auth/module-info.class]

[正在加载/modules/java.desktop/module-info.class]

[正在加载/modules/jdk.unsupported/module-info.class]

[正在加载/modules/jdk.internal.opt/module-info.class]

[正在加载/modules/jdk.unsupported.desktop/module-info.class]

[正在加载/modules/java.instrument/module-info.class]

[正在加载/modules/jdk.jcmd/module-info.class]

[正在加载/modules/jdk.jlink/module-info.class]

[正在加载/modules/jdk.xml.dom/module-info.class]

[正在加载/modules/jdk.jconsole/module-info.class]

[正在加载/modules/jdk.jstatd/module-info.class]

[正在加载/modules/jdk.compiler/module-info.class]

[正在加载/modules/jdk.internal.vm.ci/module-info.class]

[正在加载/modules/jdk.jartool/module-info.class]

[正在加载/modules/java.se/module-info.class]

[正在加载/modules/jdk.internal.vm.compiler/module-info.class]

[正在加载/modules/jdk.internal.le/module-info.class]

[正在加载/modules/jdk.charsets/module-info.class]

[正在加载/modules/java.net.http/module-info.class]

[正在加载/modules/java.xml/module-info.class]

[正在加载/modules/jdk.pack/module-info.class]

[正在加载/modules/jdk.jsobject/module-info.class]

[正在加载/modules/jdk.naming.rmi/module-info.class]

[正在加载/modules/jdk.sctp/module-info.class]

[正在加载/modules/jdk.jshell/module-info.class]

[正在加载/modules/jdk.naming.dns/module-info.class]

[正在加载/modules/jdk.net/module-info.class]

[正在加载/modules/jdk.scripting.nashorn.shell/module-info.class]

[正在加载/modules/java.datatransfer/module-info.class]

[正在加载/modules/jdk.management/module-info.class]

[正在加载/modules/jdk.httpserver/module-info.class]

[正在加载/modules/java.sql.rowset/module-info.class]

[正在加载/modules/java.management/module-info.class]

[正在加载/modules/jdk.crypto.cryptoki/module-info.class]

[正在加载/modules/java.management.rmi/module-info.class]

[正在加载/modules/java.transaction.xa/module-info.class]

[正在加载/modules/jdk.jdi/module-info.class]

[正在加载/modules/jdk.management.agent/module-info.class]

[正在加载/modules/java.security.sasl/module-info.class]

[正在加载/modules/java.naming/module-info.class]

[正在加载/modules/jdk.javadoc/module-info.class]

[正在加载/modules/jdk.accessibility/module-info.class]

[正在加载/modules/jdk.scripting.nashorn/module-info.class]

[正在加载/modules/jdk.internal.vm.compiler.management/module-info.class]

[正在加载/modules/java.prefs/module-info.class]

[正在加载/modules/java.sql/module-info.class]

[正在加载/modules/jdk.editpad/module-info.class]

[正在加载/modules/jdk.jdwp.agent/module-info.class]

[正在加载/modules/java.smartcardio/module-info.class]

[正在加载/modules/jdk.attach/module-info.class]

[正在加载/modules/jdk.zipfs/module-info.class]

[正在加载/modules/jdk.jdeps/module-info.class]

[正在加载/modules/jdk.rmic/module-info.class]

[正在加载/modules/jdk.aot/module-info.class]

[正在加载/modules/jdk.localedata/module-info.class]

[正在加载/modules/jdk.crypto.ec/module-info.class]

[正在加载/modules/jdk.crypto.mscapi/module-info.class]

[正在加载/modules/java.logging/module-info.class]

[正在加载/modules/java.compiler/module-info.class]

[正在加载/modules/jdk.management.jfr/module-info.class]

[正在加载/modules/jdk.hotspot.agent/module-info.class]

[源文件的搜索路径: .]

[类文件的搜索路径: C:\Program Files\AdoptOpenJDK\jdk-11.0.8.10-hotspot\lib\modules,.]

[正在加载/modules/java.base/java/lang/Object.class]

[正在加载/modules/java.base/java/lang/String.class]

[正在加载/modules/java.base/java/lang/Deprecated.class]

[正在加载/modules/java.base/java/lang/annotation/Retention.class]

[正在加载/modules/java.base/java/lang/annotation/RetentionPolicy.class]

[正在加载/modules/java.base/java/lang/annotation/Target.class]

[正在加载/modules/java.base/java/lang/annotation/ElementType.class]

[正在检查HelloWorld]

[正在加载/modules/java.base/java/io/Serializable.class]

[正在加载/modules/java.base/java/lang/AutoCloseable.class]

[正在加载/modules/java.base/java/lang/System.class]

[正在加载/modules/java.base/java/io/PrintStream.class]

[正在加载/modules/java.base/java/lang/Appendable.class]

[正在加载/modules/java.base/java/io/Closeable.class]

[正在加载/modules/java.base/java/io/FilterOutputStream.class]

[正在加载/modules/java.base/java/io/OutputStream.class]

[正在加载/modules/java.base/java/io/Flushable.class]

[正在加载/modules/java.base/java/lang/Comparable.class]

[正在加载/modules/java.base/java/lang/CharSequence.class]

[已写入HelloWorld.class]

[共 181 毫秒]

主要分为几个部分:

  1. 语法分析部分:[语法分析...]

  2. 模块相关部分:[正在加载/modules...]

  3. 源文件搜索部分:[源文件的搜索路径: .]。这里的.指的是当前目录。

  4. 类文件搜索部分1:[类文件的搜索路径: C:\Program Files\AdoptOpenJDK\jdk-11.0.8.10-hotspot\lib\modules,.]

  • 指的是为了编译这个HelloWorld需要在这些路径下搜索相应的类。搜索到后就加载。

  • 这里面的搜索路径有两个,一个是C:\Program Files\AdoptOpenJDK\jdk-11.0.8.10-hotspot\lib\modules还有一个是当前目录。

  • 加载所需使用的Java类库中的最基础的类,比如Object.class、注解相关字节码文件。代码中因为使用了还加载了String.class。

  • 这些类都是在java.base模块。该模块定义Java SE平台的基础API,是基础模块,不依赖于其他模块。

  1. 类文件搜索部分2:[正在检查HelloWorld].
  • 加载HelloWorld这个程序中要用到的其他类。比如System.class,PrintStream.classSystem.out中的out是一个PrintStream类型的对象。

  • 还加载了一些代码中似乎没用到的类和接口。比如,Comparable.class。实际上这个就是Comparable接口。我们的代码中的"HelloWorld!"就是个String对象,其实现了Comparable接口。

可以看到java不愧是一个面向对象语言,执行一个简单的HelloWrold都要载入这么多类。

3. 一个文件中包含多个类文件进行编译


如果一个.java文件中包含多个类的定义,使用javac编译该文件会产生多个.class文件。一个类生成一个.class文件。

注意:只能有一个public的class。

public class HelloWorld{

public static void main(String[] args) {

System.out.println(“HelloWorld”);

}

}

class Test{

}

对上述代码使用

del *.class

javac -verbose HelloWorld.java

dir *.class

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

in(String[] args) {

System.out.println(“HelloWorld”);

}

}

class Test{

}

对上述代码使用

del *.class

javac -verbose HelloWorld.java

dir *.class

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
[外链图片转存中…(img-uYZrsN9n-1714346047321)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值