在内部类中执行main方法

问题描述 投票:15回答:5

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

class A {
     static class B {
          public static void main(String[] args) {
             System.out.println("Done");
          }
     }
}
java inner-classes
5个回答
18
投票

尝试这样的事情:

  java A$B

根据评论更新:

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

java 'A$B'


10
投票

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

  • java命令将类名作为参数而不是文件名
  • 如此简单的命令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.classA$B.classA$B$1.classA$B$2.class用于匿名类和A$B$1MethodLocalClass.class

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


6
投票

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

this

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

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


3
投票

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

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

附:语言的名称是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.

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


1
投票

在Eclipse中,转到Run - > Run Configurations - >然后在左栏中选择Java Application - >单击左上角的新配置图标。

在我的情况下,它使用main方法自动拾取我的内部类。这只是一个简单的示例类,我想在不创建另一个测试/客户端类的情况下测试它。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.