在内部类中执行main方法

时间:2013-07-10 08:31:33

标签: java inner-classes

如果main方法存在于静态内部类中,如何执行它? main方法存在于静态内部类中,我们需要执行该main方法。

class A {
     static class B {
          public static void main(String[] args) {
             System.out.println("Done");
          }
     }
}

5 个答案:

答案 0 :(得分:18)

尝试这样的事情:

  java A$B

根据评论更新:

在linux shell中你应该逃避$。所以命令变成了:

java 'A$B'

答案 1 :(得分:10)

就像简单的课程一样。运行命令java A$B 编译内部类时,它前面加上外部类名 在这种情况下,您有两个类文件。即A.classA$B.class

  • java命令将classname作为参数而不是文件名
  • 如此简单的命令java A$B将完成工作
  • 如果你有匿名课程,那么课程名称将类似于OuterClass$1OuterClass$1等等。

因此,如果您按如下方式修改示例,现在包括匿名和方法本地内部类

import java.io.Serializable;

public class A {
    static class B {
        public static void main(String[] args) {
            System.out.println("Done");
            Serializable obj = new Serializable() {
            };
            Serializable obj1 = new Serializable() {
            };
            class MethodLocalClass {
            }                                           
        }
    }
}

然后,对于匿名类和A.class,您将获得的类文件为A$B.classA$B$1.classA$B$2.classA$B$1MethodLocalClass.class

希望这个例子有点帮助:)

答案 2 :(得分:6)

如果您的.java文件具有内部/嵌套类,则编译后编译将由编译器生成为 TheClass $ xxx.class 文件。

请参阅this

  

内部类定义会生成其他类文件。这些课   文件具有组合内部和外部类名称的名称,例如   的 MyClass的$ MyInnerClass.class

所以你应该这样做:java A$B

答案 3 :(得分:3)

如果你想用java启动一个类(Java启动器:java test.MyClass),那么这个类必须有一个带有众所周知签名的main方法。

您可以在任何地方使用相同签名的主方法。但是不要指望发射器会找到它。

P.S。该语言的名称是Java,而不是JAVA。

有一个小细节:

你可以这样做:

package test;

public class Test {

    /**
     * @param args the command line arguments
     */
    static public class A {

        public static void main(String[] args) {
            System.err.println("hi");
        }
    }
}
  

java test.Test $ A

但这是非标准的......

答案 4 :(得分:0)

在Eclipse中,转到运行-> 运行配置->然后在左列中选择 Java应用程序->单击新的配置图标在左上方。

就我而言,它使用main方法自动获取我的内部类。这只是一个简单的示例类,我想对其进行测试而不创建另一个测试/客户端类。

enter image description here