栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java找不到主类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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会将类文件与源文件放在同一目录中。

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

因此,您有两种选择:

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

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

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

您没有提供该

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

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

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

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

在这种解释中,我们忽略了 类路径 的概念。您还需要了解如何编写Java程序,但是在仅在当前目录中编译程序的情况下-
如果在编译类时遵循上述两种选择之一,则无需设置类路径就可以逃脱,默认情况下,Java程序将当前目录作为类路径。另一句话,这是来自Java文档的:

-cp类路径

指定目录,JAR存档和ZIP存档的列表以搜索类文件。类路径条目用分号(;)分隔。指定-classpath或-
cp会覆盖CLASSPATH环境变量的任何设置。

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

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452639.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号