0

我有以下简单的代码

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

问题是为什么我们不能在静态内部类中定义我们的主要方法?

更新1:

如答案/评论中所述,我已将代码更改为以下

public class Tester {
    public static class TesterChild {
        public static void main(String args[]) {
            System.out.println("Test");
        }
    }
}

我编译了它,它生成了两个类文件Tester.classTester$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
4

3 回答 3

4

它可以运行,main但您没有使用正确的类。您的主要课程不是Testerbut Tester.TesterChild

在 Eclipse 中,它无需任何设置即可运行,但从命令行您必须使用上述java 'yourpackage.Tester$TesterChild'其他语法。

您需要将类的名称包装在''s 中,因为在 linux/unix 上,shell 可能认为这$TesterChild是一个变量。''如果您在提示符中尝试,如果您省略s ,您将得到类似的结果:

错误:无法找到或加载主类 Tester

如果需要显式设置类路径,可以使用-cp-classpath选项,也可以从命令行设置:set CLASSPATH=/somedir

于 2013-08-26T09:32:30.950 回答
1

由于您已经main()在内部类中定义了方法。
运行内部类以main()被执行。

使用命令行java Tester$TesterChild
更新
我认为您将 java 文件放在某个包中。如果然后使用此命令行。

java -cp . yourPackageName.Tester$TesterChild
例如,我将文件放在名为test.The 的包中。然后我的命令是这样的

java -cp . test.Tester$TesterChild

于 2013-08-26T09:32:38.453 回答
1

请注意,美元符号对大多数 shell 具有特殊含义。即,如果您编写 java -cp . Tester$TesterChild外壳程序,可能会用$TesterChild具有该名称的环境变量的内容替换它,或者如果它不存在,则默默地用任何内容替换它。尝试java -cp . 'Tester$TesterChild'java -cp . Tester\$TesterChild

于 2013-08-26T10:54:34.440 回答