如何使用 java 命令运行含有包的程序
此文章是对 使用 java 命令运行 class 文件提示 “错误:找不到或无法加载主类 “的问题分析 的一个补充说明。
有时候我们会尝试使用 javac 和 java 命令来让我们的程序运行起来,一般情况下这是不会出现什么问题的。但是一旦我们添加包之后,事情就变得有些不可捉摸了,这时候命令不对的话,往往就会出现 “错误:找不到或无法加载主类” 这个恼人的错误。我们先来简单复现一下上述链接中使用包时出现的错误。
错误复现
我们或多或少会注意到 Eclipse、Netbeans 等 IDE 都是将程序源码放到 src 文件夹下的。现在我们在 E:\test 文件夹下就有一个 src 子文件夹。在 src 中我们编写了如下 HelloWorld.java 程序:
package pers.admin.test;
public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello World!");
}
}
项目树形图如下:
然后我们很自然的想到使用 javac 来编译此 java 类,当然我们此时也不忘指定 java 类的路径:
从树状图中我们可以得知我们编译成功了,此时,依照惯性我们就会仿照上述命令写出如下命令运行 java 字节码文件:
怎么会找不到主类!一脸茫然的我们可能会进行下面三种无用的挣扎:
此时,我们应该反省上述程序的 HelloWorld.java 的类名真的只是叫 HelloWorld 么?
根据结果当然不是,事实是:一个类的全名应该是包名 + 类名
。类 HelloWorld 的全名:pers.admin.test.HelloWorld。
当然如果我们更有心一点的话,就会注意到保存信息基本都是这种格式的:
好了,有了类全名的定义,我们进行如下尝试:
可以看到果然不出所料的成功了。
问题进一步延伸
当观察 IDE 文件结构的时候,我们会发现 src 目录下其实并没有那些杂乱的 .class 文件。反而 .class 文件多集中在 bin 这个文件夹下。这是为什么呢?因为 IDE 在用 javac 命令的时候指定了 .class 文件输出的路径。我们要怎么指定呢?很简单,就是使用 -d 参数:
我们来试试,不过我们得手动建好 bin 文件夹。
可以看到这里 .class 文件的确是在另一个文件夹里了。那么此时我们应该怎么用 java 命令运行这个字节码文件呢?其实上面已经剧透了一点,就是使用 java 的 -cp 参数:
这里就没什么好说了。
如果你对指定 jar 包感兴趣,可以参考我的这篇文章 https://blog.csdn.net/sinat_41104353/article/details/81028672# 方法二
另外说一句,原来之前自己碰到过这个问题,结果现在遇到还是像是没长记性一样…