我有以下简单代码
public class Tester {
static class TesterChild {
public static void main(String args[]) {
System.out.println("Test");
}
}
}
编译好。但是当我运行它时,我得到以下错误
[aniket@localhost src]$ java Tester
Error: Could not find or load main class Tester
问题是为什么我们不能在静态内部类中定义我们的main方法?
Update1:
如答案/评论中所述,我已将代码更改为以下
public class Tester {
public static class TesterChild {
public static void main(String args[]) {
System.out.println("Test");
}
}
}
我编译了它,它创建了两个类文件Tester.class
和Tester$TesterChild.class
。但我仍然得到错误
[aniket@localhost Desktop]$ java Tester$TesterChild
Error: Could not find or load main class Test
更新2:
好的,现在我在类路径中包含当前目录并执行仍然收到错误
[aniket@localhost Desktop]$ java -cp . Tester$TesterChild
Error: Main method not found in class Tester, please define the main method as:
public static void main(String[] args
答案 0 :(得分:4)
它可以作为main
运行,但您没有使用正确的类。您的主要课程不是Tester
,而是Tester.TesterChild
。
在Eclipse中,它将在没有任何设置的情况下运行,但是从命令行开始,您必须像上面提到的那样使用java 'yourpackage.Tester$TesterChild'
语法。
您需要在''
中包装类的名称,因为在linux / unix上,shell可能认为$TesterChild
是一个变量。如果你在提示中尝试一下,如果省略''
s,你会得到类似的东西:
错误:无法找到或加载主类测试程序
如果您需要显式设置类路径,可以使用-cp
或-classpath
选项,也可以从命令行设置:set CLASSPATH=/somedir
答案 1 :(得分:1)
由于您已在内部类中定义了main()
方法
运行内部类以使main()
被执行。
使用命令行java Tester$TesterChild
更新
我认为你将java文件放在一些包中。如果使用这个命令行。
java -cp . yourPackageName.Tester$TesterChild
例如,我将文件放在名为test
的包中。然后我的命令就像这样
java -cp . test.Tester$TesterChild
答案 2 :(得分:1)
请注意美元符号对大多数贝壳都有特殊意义。即如果你写
java -cp . Tester$TesterChild
您的shell可能会将$TesterChild
替换为具有该名称的环境变量的内容,或者如果它不存在则以静默方式替换它。试试java -cp . 'Tester$TesterChild'
或java -cp . Tester\$TesterChild