命令行cmd使用javac编译java程序
1.1 编译选项
在cmd中执行javac -help
可以看到帮助信息
D:\temp>javac -help
用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-parameters 生成元数据以用于方法参数的反射
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-h <目录> 指定放置生成的本机标头文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-profile <配置文件> 请确保使用的 API 在指定的配置文件中可用
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名
1.2 编译Java程序
1.2.1 直接编译当前目录下文件
编写以下代码并保存成Date2.java
:
import java.util.Calendar;
import java.util.Locale;
public class Date2 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance(Locale.CHINA);
System.out.println("获取时间: " + calendar.getTime());
}
}
然后在命令行执行javac Date2.java
即可编译,
接着执行java Date2
即可运行程序:
1.2.2 带有包路径的编译
我们在当前文件夹下新建com/amnotgcs文件目录,
并在里面创建Num3.java,即com/amnotgcs/Num3.java
输入下面代码:
package com.amnotgcs;
import java.util.Scanner;
import java.text.NumberFormat;
import java.text.ParseException;
public class Num3 {
public static void main(String[] args) throws ParseException {
Scanner scanner = new Scanner(System.in);
System.out.print("Please input a num: ");
String input = scanner.next();
NumberFormat nf = NumberFormat.getInstance();
System.out.println(nf.parse(input));
}
}
然后我们在当前文件夹下执行javac com/amnotgcs/Num3.java
编译程序,
接着执行java com.amnotgcs.Num3
或java com/amnotgcs/Num3
来运行程序:
我们这样编译时因为代码中有了包路径,直接编译会报找不到类错误,
当然我们也可以使用另一种编译方式。
我们在Num3.java所在目录执行javac -d . Num3.java
来编译程序,
这样编译会在当前目录产生pacage所指定的目录,并编译程序。
1.2.3 指定编码编译
我们仍使用1.2.1的代码,
在编译后后运行可能会出现乱码的情况:
这是由于编码不统一导致的错误,
这涉及到了两个编码:一个时命令行所使用的编码,一个是你.java文件使用的编码。
只有你输出时cmd的编码和你编译时.java文件的编码一样才能正常输出。
所以要想正确输出:
1、你可以更改.java文件的编码和你cmd编码一致
2、或者你可以更改cmd编码和你.java文件编码一致
3、编译时指定编码
在cmd中执行chcp
可以查看编码,也可以执行chcp xxxx
临时设置编码,
比如chcp 65001
设置为UTF-8
编码,
chcp 936
设置为GBK编码。
文件的编码可以在保存或另存为时选择编码,
或在其他文本编辑器中直接指定编码,
比如在notepad3中直接指定编码:
编译时指定编码:
用法:-encoding <编码> 指定源文件使用的字符编码
下图编译时文件使用的是UTF-8编码,所以我用-encoding UTF-8指定了UTF-8编码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~