命令行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.Num3java 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编码

posted @   那个白熊  阅读(1734)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示