java找不到主类_Java找不到主类

小编典典

您的课程Hello属于该包com。因此,您的课程的全限定名是com.Hello。在命令行上使用java调用程序时,应提供包含main方法的类的标准类名,并省略

.class ,如下所示:

java com.Hello

Java程序需要此完全限定的类名来了解您所指的是哪个类。

但是你还有另一个问题。Java程序使用文件系统查找包,子包以及属于它们的类。因此,如果您具有类似的包结构com.Hello,则Java程序希望在名为

com 的目录中找到一个名为 Hello.class 的类文件,如下所示: com / Hello.class

。实际上,您可以在所看到的中观察到这种行为。您错误地使用了 Hello.class ,它被java解释为一个名为的 包 和一个名为的 类

,并且正在寻找目录结构 Hello / class : Exception Hello class

java.lang.NoClassDefFoundError:您好/类

但是默认情况下,编译器javac 不会

设置此目录结构。请参阅javac的文档,但重要的一点是:进行编译时,可以使用-d标志指定目标目录:

-d目录

设置类文件的目标目录。目标目录必须已经存在;javac将不会创建目标目录。如果类是包的一部分,则javac会将类文件放在反映包名称的子目录中,并根据需要创建目录。例如,如果指定-

dc:\ myclasses且该类称为com.mypackage.MyClass,则该类文件称为c:\ myclasses \ com \

mypackage \ MyClass.class。

如果未指定-d,则javac会将类文件与源文件放在同一目录中。

粗体字的最后一点是给初学者造成很多混乱的根源,并且是您自己的问题的一部分。

因此,您有两种选择:

就您而言,如果您将当前目录作为目标目录提供就可以了,就像这样(句点.表示 当前目录 ):javac -d . Hello.java

如果您这样调用编译器,它将为您创建 com 目录,并将已编译的类文件放入其中,这是Java程序期望找到它的方式。然后,当您如上所述运行Java时,应从

c:\ tmpJava 运行程序。

您可以使用与包结构类似的目录结构来设置源代码:在示例中,将源文件 Hello.java 放在名为 com 的目录中: c:\ tmpJava \ com \ Hello.java 。现在,从 c:\ tmpJava 您可以像这样运行javac编译:javac com\Hello.java

您没有提供该-d标志,但这很好,因为您自己创建了目录结构,并再次引用了上面的文档:

如果未指定-d,则javac会将类文件与源文件放在同一目录中。

同样,当您如上所述运行Java时,您的程序应执行。

请注意,第二种选择是Java程序员常用的选择:源代码文件以反映包结构的目录结构组织。

在这种解释中,我们忽略了 类路径 的概念。您还需要了解如何编写Java程序,但是在仅在当前目录中编译程序的情况下-

如果在编译类时遵循上述两种选择之一,则无需设置类路径就可以逃脱,默认情况下,Java程序将当前目录作为类路径。另一句话,这是来自Java文档的:

-cp类路径

指定目录,JAR存档和ZIP存档的列表以搜索类文件。类路径条目用分号(;)分隔。指定-classpath或-

cp会覆盖CLASSPATH环境变量的任何设置。

如果未使用-classpath和-cp且未设置CLASSPATH,则用户类路径由当前目录(。)组成。

请注意,当您使用类似Eclipse的IDE来运行Java代码时,通常可以为您解决此问题,但是仍然会遇到类路径问题。

2020-09-15

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值