Java环境变量设置后,编写第一个程序报错:找不到或无法加载主类 D:\java\HelloWorld

本文解析了在Java环境中运行HelloWorld程序时遇到的“找不到或无法加载主类”错误,详细介绍了正确的编译和运行命令,以及环境变量配置的重要性。

Java 环境变量配置完后,按照网上说的办法测试都成功了,但在写第一个HelloWorld程序时,编译通过了,运行时报“找不到或无法加载主类 D:\java\HelloWorld”错误。
运行错误

网上解决办法

编程时习惯地认为一个执行命令后面一般跟的是一个文件,所以毫不犹豫地敲入

javac D:\java\HelloWorld.java

发现没有报错,相应文件下生成了HelloWorld.class文件,说明编译成功,兴奋之余,接着很自然地敲入

 java D:\java\HelloWorld.class 

接着就报了上面图片中的错误,开始在网上搜,大部分解释是环境变量配错了,重新配置环境变量

  • 有的说应该去掉.class 后缀
java D:\java\HelloWorld
  • 有的说直接执行
java HelloWorld
  • 还有的说“CLASSPATH值的最后没;(分号)会出现以下错误:错误:找不到或无法加载主类HelloWorld。”

  • 还有一种说法是“java HelloWorld 时,字母大小写搞错也出错”

结果试了各种办法无解,有种想把电脑摔了的冲动,最后认真看了一下javac和java命令帮助文件,联想一下编译知识才恍然发现自己犯了一个特别低级的错误。

原因

Java编译原理不理解,写程序不认真

javac是个java语言编译器,它的用法:
javac用法
它的作用是把java程序编写的类和接口编译成字节代码的class文件,截图中我们看到它操作的是一个文件,最后会生成一个class文件

javac <options> <source files>

而java命令程序则是一个解释器,它的作用是把编译后生成的class文件解释成机器能够识别的机器码,并最终由运行环境中的Runtime对代码进行运行,真正实现我们想要机器完成的工作。从截图的帮助文档中我们看到它要执行的是类,是一个和class文件名字完全相同(大小写也要一样)的类
java命令帮助
java 命令的作用就是Java虚拟机的作用,虚拟机的功能如下:

  • 通过 ClassLoader 寻找和装载 class 文件
  • 解释字节码成为指令并执行,提供 class 文件的运行环境
  • 进行运行期间垃圾回收
  • 提供与硬件交互的平台

解决办法

执行java命令的时候要到class 文件所在的目录下,并且class 这个参数应该只填类的名称(即和class文件名字完全相同)
我的文件是放在了D:\java目录下,cmd后切换到D:\java 目录下,然后再执行编译和运行命令。
切换目录运行命令

小结

  • 原理性的知识不可忽视,需要在实践中不断理解,达到融会贯通;
  • 做什么事情都要认真,很多错误都是不认真造成的。
### CMD 中运行 Java 文件时 '不到无法加载' 的解决方案 当在命令提示符 (CMD) 下尝试运行 Java 文件并遇到 `'不到无法加载'` 错误时,通常是因为以下几个原因之一: #### 1. **环境变量配置错误** 确保 `JAVA_HOME` 和 `PATH` 环境变量已正确定义。如果未设置这些变量,则可能导致 JVM 无法到编译器解释器。 - 验证方法:输入 `java -version` `javac -version` 来确认安装路径是否正确[^1]。 #### 2. **当前目录不匹配** 执行 `java` 命令时,需注意工作目录应与 `.class` 文件所在位置一致。假设有一个名为 `Main.java` 的文件位于 `C:\project\src` 路径下,并定义了一个包结构 `com.example.Main`: - 正确做法是在项目根目录(即包含 `src/com/example/Main.class` 的上级目录)运行如下命令: ```bash java com.example.Main ``` #### 3. **路径指定有误** 如果没有显式声明 `-cp` 参数来指明路径,默认情况下只会查当前目录下的 `.class` 文件。因此,若目标存在于其他地方,必须通过 `-cp` 明确指出其具体位置。 - 示例代码片段展示如何手动设定classpath: ```bash javac -d . Main.java java -cp . com.example.Main ``` #### 4. **源码中的包名问题** 假如程序内部使用了 package 关键字声明命名空间,则启动时也得按照完整的限定名称调用该而非单纯依靠简单名字。 例如,在下面的例子中,虽然创建的对象只是简单的字符串拼接操作,但由于存在package语句所以实际调用形式有所变化[^3]: ```java // File: src/com/example/Main.java package com.example; public class Main { public static void main(String[] args){ System.out.println("Hello Xiao!"); } } ``` 此时应该这样执行而不是仅仅写成`java Main`: ```bash cd C:\project\ java -cp . com.example.Main ``` 综上所述,针对上述提到的各种可能性逐一排查后应当能够有效解决此报错现象。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值