
在 Windows 命令行中运行带包声明的 Java 类时,必须从包根目录(即最外层源码目录)执行 java 命令,并使用完整限定类名(如 pkg.Manager_1),否则会因类路径错误导致 ClassNotFoundException。
在 windows 命令行中运行带包声明的 java 类时,必须从包根目录(即最外层源码目录)执行 `java` 命令,并使用完整限定类名(如 `pkg.manager_1`),否则会因类路径错误导致 `classnotfoundexception`。
当你在 Java 中使用 package pkg; 声明类所属包时,JVM 要求类文件必须位于与包结构匹配的子目录中,且运行时需从包根目录启动 java 命令——即该目录下直接包含 pkg/ 子目录。
以你的项目结构为例:
D:\eclipse-workspace-ghj2\ExecJava\src\ ├── pkg\ │ └── Manager_1.class ← 编译后生成
✅ 正确操作步骤如下:
-
切换到包根目录(即 src 目录):
cd D:\eclipse-workspace-ghj2\ExecJava\src
-
确保已编译(.class 文件存在):
若尚未编译,先执行(注意路径需相对于当前目录):javac pkg\Manager_1.java
-
使用完整限定类名运行:
java pkg.Manager_1
⚠️ 注意:此处 java 命令后跟的是类的全限定名(包名.类名),不是文件路径,也不是 .class 后缀;且当前目录必须能“看到” pkg 目录(即 pkg 是当前目录的直接子目录)。
❌ 错误做法(如你在 pkg 目录内执行):
D:\...\src\pkg> java pkg.Manager_1 ← 失败!JVM 会在当前目录下找 `pkg/pkg/Manager_1.class`
此时 JVM 将尝试在 .\pkg\pkg\Manager_1.class 查找,显然不存在,故抛出 ClassNotFoundException。
? 补充说明:
- 若类依赖其他类或 JAR 包,可通过 -cp 显式指定类路径,例如:
java -cp ".;lib/commons-lang3.jar" pkg.Manager_1
- 推荐始终使用绝对路径或明确的相对路径组织源码,并统一在 src(或 bin/classes)根目录下编译与运行,避免路径混乱。
掌握这一机制,是理解 Java 类加载与包管理的基础,也是脱离 IDE 后独立构建、调试命令行 Java 程序的关键前提。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











