CMD编译Java程序所遇到的问题
今天尝试在Windows下CMD编译执行java源文件。
步骤
1.编写测试用程序
打开Windows自带的记事本,直接编写无格式测试代码。
public class HelloWorld
{
//Java程序的入口方法,程序从这里开始执行
public static void main(String[] arg)
{
//向控制台打印一条语句"Hello World!"
System.out.println("Hello World!");
}
}2.保存Java源文件
1.将源文件命名为HelloWorld.java
2.文件资源管理器–>(左上角)文件–>选项–>查看–>下图选项–>取消勾选
这项操作可保证:通过重命名直接修改文件后缀。
3.源文件路径为D:\Java\code
3.进入CMD编译
1.将路径转到D盘:C:\Users\ASUS>d:
2.查看D盘文件夹目录:D:>dir
3.将路径转到Java文件夹:D:>cd Java
4.查看D:\Java文件夹目录:D:\Java>dir
4.将路径转到code文件夹:D:\Java>cd code
5.使用javac -d destdir srcFile命令编译Java源文件:
D:\Java\code>javac -d . HelloWorld.java
6.运行后,应该在当前路径下生成一个HelloWorld.class文件。
4.出现的问题
在3.5步骤之前的操作均得到正常结果,没有错误提示。但执行到第3.5步时,出现了以下错误提示:
错误:编码GBK的不可映射字符
编译过程分析:
1.在用javac命令编译时,编译器首先会获得Windows默认的编码格式GBK(GBK编码格式的功能少,仅限于中文字符)。
2.JDK把.java源文件从GBK编码格式转换为Java内部默认的编码格式Unicode,暂存在内存中。
3.源文件经编译后,Unicode格式的.java源文件变成.class类文件。此时,class文件是Unicode编码的,暂存在内存中。
4.JDK将这个class文件保存到操作系统中,即为见到的.class文件。
出错点:
采用默认方法对.java文件进行编译,相当于使用了参数:
javac -encoding GBK FileName.java,会出现不兼容的情况。
5.编译错误解决方法
使用-encoding命令设置编码方式:
javac -encoding UTF-8 FileName.java
6.关键代码段
D:\Java\code>javac -encoding UTF-8 HelloWorld.java
7.编译结果
成功在当前目录生成了.class字节码文件。
8.执行结果
在进行执行步骤时,出现了以下错误提示:
错误:找不到或无法加载主类HelloWorld
执行过程分析:
1.成功生成了.class文件说明编译成功,故从执行过程入手。
2.这是一个找不到类定义的错误,是一个典型错误,通常都是由CLASSPATH环境变量设置不正确造成的。
3.资料显示“如果使用1.5以上版本的JDK,完全可以不用设置CLASSPATH环境变量,也可以正常编译和运行Java程序”,虽然我是13.0.2版本的JDK,但不设置该环境变量确无法执行程序。
4.不设置CLASSPATH环境变量–>Java解释器在当前路径下搜索Java类–>在.class文件所在路径执行java HelloWorld将没有任何问题。
5.设置CLASSPATH环境变量–>Java解释器将只在CLASSPATH环境变量所指定的一系列路径中搜索Java类–>容易出现问题。
6.设置CLASSPATH环境变量应特别注意:
不能只添加dt.jar和tools.jar两个文件,必须添加点(.),即当前路径,强制Java解释器在当前路径下搜索Java类,否则会出错。
出错点:
环境变量CLASSPATH没有配置过。
9.执行错误解决方法
1.查看系统变量CLASSPATH,没有更新过。
2.编辑CLASSPATH的值,添加以下三个值:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
10.检验执行结果

成功执行Java程序。