目录
一、编码GBK的不可映射字符:
1、现象
2、解决方法
ANSI:ANSI是什么编码? - malecrab - 博客园 (cnblogs.com)
二、找不到或无法加载主类
一、编码GBK的不可映射字符:
1、现象
在初学过程中,不会用到相关的代码工具,经常会使用CMD来运行java程序,有的时候会报该错误。看源代码:
float score;
String grade="";
Scanner inScore = new Scanner(System.in);
score = inScore.nextFloat();
if (score < 0 || score > 100) {
grade = score + "输入成绩不合法";
} else if (score >= 90) {
grade = "A";
} else if (score >= 80){
grade = "B";
}
System.out.print(grade);
编译错去的原因是因为输出的内容中以及注释中含有中文,导致了类似与下图的错误:
因为CMD运行窗口在运行Java程序的时候,默认编码格式是GBK,但是在代码编写时,JAVA采用的编码方式是Unicode编码方式,中文亦是,这就导致编码和解码所用的对照表是不相同的标准,导致我们所看到的乱码问题。
2、解决方法
如果使用的是notpad++编辑器工具,可以在进行代码的编写之前,将编码方式转换围殴“使用ANSI格式编码”,注意先后顺序,要先进行编码的转换在进行编码,如果已经编码可以先进行剪切,转换编码方式后再进行粘贴即可。
ANSI:ANSI是什么编码? - malecrab - 博客园 (cnblogs.com)
如果使用的其他的工具进行代码的编写,可以使用-encoding指令来为文件制定编码格式,例如:如上的可以写为java -encoding UTF-8 test02.java,即可成功的进行编译和运行。
二、找不到或无法加载主类
对test02通过终端进行运行,报以上错误
因为java中完整的类名是包名+类名,路径:D:\Idea\JAVATEST\src\test
有包test,故执行时,在类名那里应该写入:test.test02.java
但是按照这个路径进行运行指令,仍然报错
因为按照这种写法,其路径就成为了
D:\Idea\JAVATEST\src\test\test\test02.class
很明显这个路径是错误的,所以在运行时会报错,所以真正的运行路径应该是:
D:\Idea\JAVATEST\src\test\test02.class
所以应该将路径退回到D:\Idea\JAVATEST\src 才可以正确执行
以下结论转字文二连接:
java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。
程序在运行的时候具体是如何确定.class文件位置的呢?
Java解释器的运行过程:首先,找出环境变量CLASSPATH(可以通过操作系统来设置)。CLASSPATH包含一个或多个目录,用作查找.class文件的根目录。从根目录开始,解释器获取包名称并将每个句点替换成反斜杠,以从CLASSPATH根中产生一个路径(例如,package fruit.Apple就变成为fruit/Apple或fruit/Apple或其他,这将取决于操作系统)。得到的路径会与CLASSPATH中的各个不同的根目录路径相连接以获得一个完整的目录路径,解释器就在这些目录中查找与你所需要的类名称相同的.class文件。(此外,解释器还会去查找某些涉及Java解释器所在位置的标准目录。)
所以在这里java寻找的就是classpath+package名+类名
文一原文连接:错误: 编码 GBK 的不可映射字符 (0x80)_凌云-CSDN博客
文二原文连接:JAVA初学:错误: 找不到或无法加载主类 test_ncc1995的博客-CSDN博客