Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我们不能在静态内部类中定义main函数吗?_Java_Inner Classes - Fatal编程技术网

Java 为什么可以';我们不能在静态内部类中定义main函数吗?

Java 为什么可以';我们不能在静态内部类中定义main函数吗?,java,inner-classes,Java,Inner Classes,我有以下简单的代码 public class Tester { static class TesterChild { public static void main(String args[]) { System.out.println("Test"); } } } 它编译得很好。但是当我运行它时,我得到了以下错误 [aniket@localhost src]$ java Tester Error: Could not f

我有以下简单的代码

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.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

它可以作为
main
运行,但您使用的类不正确。您的主类不是
Tester
,而是
Tester.TesterChild

在Eclipse中,它将在没有任何设置的情况下运行,但在命令行中,您必须使用上面提到的
java'yourpackage.Tester$TesterChild'
语法

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

错误:无法找到或加载主类测试器


如果需要显式设置类路径,可以使用
-cp
-classpath
选项,也可以从命令行进行设置:
set classpath=/somedir
它可以作为
main
运行,但使用的类不正确。您的主类不是
Tester
,而是
Tester.TesterChild

在Eclipse中,它将在没有任何设置的情况下运行,但在命令行中,您必须使用上面提到的
java'yourpackage.Tester$TesterChild'
语法

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

错误:无法找到或加载主类测试器


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

,因为您已经在内部类中定义了
main()
方法。
运行内部类以获取要执行的
main()

使用命令行
JavaTester$TesterChild

更新
我认为您正在将java文件放在某个包中

java-cp。yourPackageName.Tester$TesterChild

例如,我将文件放在名为
test
的包中


java-cp。test.Tester$TesterChild

因为您已经在内部类中定义了
main()
方法。
运行内部类以获取要执行的
main()

使用命令行
JavaTester$TesterChild

更新
我认为您正在将java文件放在某个包中

java-cp。yourPackageName.Tester$TesterChild

例如,我将文件放在名为
test
的包中


java-cp。test.Tester$TesterChild

请注意,美元符号对大多数shell具有特殊意义。也就是说,如果你写
java-cp。Tester$TesterChild
您的shell可能会用具有该名称的环境变量的内容替换
$TesterChild
,或者如果环境变量不存在,则以无提示方式替换它。试试
java-cpTester$TesterChild'
java-cp。Tester\$TesterChild

注意,美元符号对大多数Shell都有特殊意义。也就是说,如果你写
java-cp。Tester$TesterChild
您的shell可能会用具有该名称的环境变量的内容替换
$TesterChild
,或者如果环境变量不存在,则以无提示方式替换它。试试
java-cpTester$TesterChild'
java-cp。Tester\$TesterChild

您的主类不是
Tester
,而是
Tester.TesterChild
。我也会把它公之于众(这可能是一个要求)。它对我来说很好用。在eclipse和命令提示符中都尝试过。这里也一样。OP可能还有一些其他问题,但在他的示例中没有出现。在我的Intellij IDEA中工作正常,但在CLI执行中有问题。@Aniket Thakur更新了我的答案以解决此问题。请查看它。您的主要类不是
Tester
,而是
Tester.TesterChild
。我也会把它公之于众(这可能是一个要求)。它对我来说很好用。在eclipse和命令提示符中都尝试过。这里也一样。OP可能还有一些其他问题,但在他的示例中没有出现。在Intellij IDEA中工作正常,但在CLI执行中出现问题。@Aniket Thakur更新了我的答案以解决问题。请仔细研究。完美+1.谢谢你!太好了+1.谢谢你!