java - 当我尝试在终端中运行我的 java 程序时,是否需要编写注释 (.java)?
问题描述
通常,我们使用关键字编译一个java程序javac
,然后使用关键字运行它java
。但在我的情况下,如果我只输入java Main.java
,它运行没有任何问题。
但是,如果我尝试以传统方式运行程序:
javac Main.java
java Main
它返回一个错误:
Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError
这应该发生吗?我学会了传统的方法。
我已将IntelliJ设置为打开.class
和.main
文件的默认应用程序。
解决方案
编译代码后,您最终会得到 .class 文件。这些二进制文件是 Java 解释以执行您的程序的字节码。
NoClassDefFoundError 表示负责动态加载类的类加载器找不到您尝试使用的类的 .class 文件。
为了解决这个错误,你必须知道 Java 是如何查找和加载类的,你只需要记住有一个名为 CLASSPATH 的环境变量,其中包括 Java 查找所有类文件的目录,如果它没有找到你的主类然后它会抛出“错误:无法找到或加载主类 XXX”,其中 XXX 是您的主类的名称。
例如,如果你有一个类 com.example.,编译后你会有一个类文件 sensor.class。例如,您的工作目录是 .../project/。该类文件必须放在 .../project/com/example 中,您可以将类路径设置为 .../project/
例子:-
C:\project\practice\Main.class
在我的电脑上。
C:\project\practice\
它会运行吗?不,它不会运行它会给你:
线程“main”中的异常 java.lang.NoClassDefFoundError: Test 由于类的名称不是 Main,而是 practice.Main,即使您的类路径设置为当前目录。
现在,如果我从 C:\project\practice\ 发出命令 java practice.Main 会发生什么,它将再次无法运行并给出错误?
线程“main”中的异常 java.lang.NoClassDefFoundError: practice/Main
为什么,因为现在它正在寻找一个名为 Main 的类,它正在包实践中,从当前目录“。”开始。但找不到它,因为在此路径“C:\project\practice”之后没有名为“practice”的目录。
要成功运行它,您需要返回目录 C:\project 现在运行 C:\project>java practice.Main 它将成功运行
推荐阅读
- java - 如何避免 Firebase AuthListener 被触发两次?
- c# - 我可以在 webAPI 项目中运行 Azure 存储队列处理器吗?
- python - 使用python用3个月前的平均值填充0
- python - 在 Pandas Dataframe 中合并/合并时如何保留列名
- django - Django:两个模型之间的两种关系
- python - 用于短唯一内容 ID 的散列算法
- java - 将 Spring boot Angular 应用程序部署到 Tomcat 服务器
- mysql - mysql.connect 永远不会返回
- node.js - 如何使用 http POST 方法将当前用户(使用应用程序的人)、Firebase Id 令牌从 Flutter 应用程序发送到 restapi?
- mysql - 如何有效地查询 MySQL 中特定日期范围之间的行?