loong - Java 命令 - javac

embedded/2024/10/19 13:28:49/

javac_0">loong - Java 命令 - javac

javac命令用于将Java源代码编译成Java字节码文件(.class文件),以便在Java虚拟机(JVM)上运行。

基本语法

javac [options] source_file(s)

参数说明

  • options:javac命令提供了多个选项来控制编译过程和生成的字节码文件的行为。可以使用javac -help查看所有选项及其说明。
  • source_file(s):指定要编译的源代码文件的路径。可以使用通配符(*)来编译整个文件夹中的所有Java文件。例如,javac *.java会同时编译当前目录中的所有Java文件。

常用选项

  • -d directory:指定编译生成的.class文件的输出目录。

  • -classpath path:指定可供编译器使用的类路径。

  • -source version:指定要编译的Java源代码的版本(例如,-source 8表示使用Java 8的语言功能进行编译)。

  • -target version:指定要生成的字节码文件的Java版本(例如,-target 1.8表示要生成适用于Java 8的字节码文件)。

  • -Xlint:启用编译器警告消息。

  • -verbose:显示编译器的详细输出信息。

使用案例

前提

User.java 实体类结构

java">package a.b;
public class User {public String id;public String name;public int age;
}

javac_source_files_46">javac source_file(s)

# javac source_file(s)
# 会在HelloWorld.java 同一个文件夹下生成一个HelloWorld.class文件
javac User.java

结果

编译后的.class文件和源.java文件会在同包下

在这里插入图片描述

javac__d_dir_source_file_62">javac -d dir source_file

# javac -d target source_file(s)
# javac   源文件   -d   编译文件输出路径 : 
# 编译源文件,并将编译后的 .class 文件 放到 -d 参数后的目标路径中;
# 例如 User.java 文件中 package a.b; 执行此命令会将.class文件放入对应的文件夹中(a文件夹下b文件夹下的User.class)
# 前提:target文件夹必须存在,否则会报错文件不存在,在User.java 所在文件夹下新建一个target文件夹
javac -d target User.java
#或者
javac -d . User.java

结果

javac -d target User.java 编译后的文件会在target/a/b文件夹下

在这里插入图片描述

javac -d . User.java 编译后的文件会在源Java文件同文件夹下/a/b文件夹下

在这里插入图片描述

javac_classpath_path_source_files_89">javac -classpath path source_file(s)

前提

Main.java 在 main包下,引用的User在a.b包下

java">package main;import a.b.User;
public class Main {public static void main(String[] args) {User user = new User();user.name = "moon";user.age = "7";System.out.println(user.name + "今年" + user.age + "岁");}}

使用 javac Main.java 命令直接编译会报错,因为Main.java 引用了User.java 但是其又找不到我们引用的User.java文件

D:\loong-log\main>javac Main.java
Main.java:3: 错误: 程序包a.b不存在
import a.b.User;^
Main.java:11: 错误: 找不到符号User user = new User();

所以执行javac的时候,如果想要从其他目录找到需要编译的文件,那么需要加参数-cp指定目录

方式一: javac -classpath …; Main.java

方式二: javac -classpath D:/loong-log Main.java

方式三: javac -cp …; Main.java

方式二: javac -cp D:/loong-log Main.java

解释: (以Main.java所在main包的上一层loong-log文件夹为根目录开始编译)

提示: 多个引入要使用:或者;分隔

结果

对应文件夹Java文件编译成功

在这里插入图片描述
在这里插入图片描述

javac_source__version_source_file_143">javac -source version source_file

指定要编译的Java源代码的版本

例如: javac -source 8 User.java

D:\loong-log\a\b>javac -source 8 User.java

java_target_version_source_file_155">java -target version source_file

定要生成的字节码文件的Java版本

例如: javac -target 1.8 User.java --> 指定生成的class文件适用jdk 1.8 环境

javac -target 1.8 User.java

javac_Xlint_source_file_167">javac -Xlint source_file

启用编译器警告消息。

javac -Xlint User.java

javac_verbose_source_file_175">javac -verbose source_file

显示编译器的详细输出信息。

D:\loong-log\a\b>javac -verbose User.java
[解析开始时间 RegularFileObject[User.java]]
[解析已完成, 用时 10 毫秒]
[源文件的搜索路径: .,C:\Program Files\Java\jdk-1.8\lib\dt.jar,C:\Program Files\Java\jdk-1.8\lib\tools.jar]
[类文件的搜索路径: C:\Program Files\Java\jdk-1.8\jre\lib\resources.jar,C:\Program Files\Java\jdk-1.8\jre\lib\rt.jar,C:\Program Files\Java\jdk-1.8\jre\lib\jsse.jar,C:\Program Files\Java\jdk-1.8\jre\lib\jce.jar,C:\Program Files\Java\jdk-1.8\jre\lib\charsets.jar,C:\Program Files\Java\jdk-1.8\jre\lib\jfr.jar,C:\Program Files\Java\jdk-1.8\jre\classes,C:\Program Files\Java\jdk-1.8\jre\lib\ext\access-bridge-64.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\cldrdata.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\dnsns.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\jaccess.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\jfxrt.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\localedata.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\nashorn.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunec.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunjce_provider.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunmscapi.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\sunpkcs11.jar,C:\Program Files\Java\jdk-1.8\jre\lib\ext\zipfs.jar,.,C:\Program Files\Java\jdk-1.8\lib\dt.jar,C:\Program Files\Java\jdk-1.8\lib\tools.jar]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/lang/Object.class)]]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/lang/String.class)]]
[正在检查a.b.User]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/io/Serializable.class)]]
[正在加载ZipFileIndexFileObject[C:\Program Files\Java\jdk-1.8\lib\ct.sym(META-INF/sym/rt.jar/java/lang/AutoCloseable.class)]]
[已写入RegularFileObject[User.class]]
[126 毫秒]

http://www.ppmy.cn/embedded/23973.html

相关文章

docker容器---docker-compose容器集群的快速编排

一、Docker-compose简介 Docker-Compose项目是基于Python开发的Docker官方开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是 工程(project),服务(service&am…

vue上传图片 :on-success成功后传第三方参数

:on-success"function (response) {return handleUploadSuccess(response, companyPic) }"handleUploadSuccess(res,type) {console.log(res, type);this.form[type] res.data.fileName;this.$forceUpdate();console.log(this.form);},其中 type边上组件中传入的第三…

Linux进程——进程的概念(PCB的理解)

前言:在了解完冯诺依曼体系结构和操作系统之后,我们进入了Linux的下一篇章Linux进程,但在学习Linux进程之前,一定要阅读理解上一篇内容,理解“先描述,再组织”才能更好的理解进程的含义。 Linux进程学习基…

Arch Linux安装macOS

安装需要的包 sudo pacman -S qemu-full libvirt virt-manager p7zip yay -S dmg2img安装步骤 cd ~ git clone --depth 1 --recursive https://github.com/kholia/OSX-KVM.git cd OSX-KVM # 选择iOS版本 ./fetch-macOS.py #将上一步下载的BaseSystem.dmg转换格式 dmg2img -…

jadx反编译apk

ref:https://github.com/skylot/jadx jadx是一款反编译利器,同时支持命令行和图形界面,能以最简便的方式完成apk的反编译操作。 安装: 1.windos: https://github.com/skylot/jadx/releases/tag/v1.2.0 下载jadx-1.…

如何一键清除文件目录下所有的node_modules

如何一键清除文件目录下所有的node_modules 快速删除目录下的node_modules,下面附上windows和mac的脚本指令 windows脚本 FOR /d /r . %d in (node_modules) DO IF EXIST "%d" rm -rf "%d"mac脚本 find . -name "node_modules" -…

leetcode1146--快照数组

1. 题意 对一个数组进行多次修改,然后照一个快照。 再对数组进行询问第k次快照时的index处的值。 2. 题解 哈希表 二分 对于每个位置,我们只需要顺序记录这个位置更改的快照和时间和值即可; 再通过二分查找来获取它的值。 我的代码 cl…

sklearn混淆矩阵的计算和seaborn可视化

为了计算语义分割的指标miou,需要生成的中间过程就是混淆矩阵。 iou intersection / union 每个类别的平均iou就是mean iou。 使用sklearn自带的confusion_matrix能很容易生成混淆矩阵,可以进行混淆矩阵的可视化观察哪个类别分割的不好。 from skle…