如何在CMD中运行位于非包结构子文件夹下的Java .class文件
问题根因
Java类加载机制有严格的匹配规则:类的完全限定名必须和classpath(类路径)下的目录结构完全对应。
你的HelloWorld类代码里定义的包是helloworld,所以它的完全限定名是helloworld.HelloWorld,JVM执行时会默认在当前工作目录下查找helloworld/HelloWorld.class文件:
- 你切换到
myapp目录后执行命令,当前工作目录正好是helloworld文件夹的上级,JVM能正常找到对应文件,所以运行成功 - 你站在
C:\test目录执行java myapp\helloworld.HelloWorld时,相当于告诉JVM要找包名为myapp.helloworld的HelloWorld类,和代码里定义的包名不符,就会抛出类找不到的错误
不切换目录的解决方法
直接用-cp(-classpath的缩写)参数手动指定类路径的根目录为myapp即可,在C:\test目录下执行以下任意一条命令都能正常运行:
# 用相对路径指定类路径 java -cp myapp helloworld.HelloWorld # 用绝对路径指定类路径,兼容性更强 java -cp C:\test\myapp helloworld.HelloWorld
内容的提问来源于stack exchange,提问作者KBee
相关产品推荐
相关产品推荐

