如果main方法存在于静态内部类中,如何执行它? main方法存在于静态内部类中,我们需要执行该main方法。
class A {
static class B {
public static void main(String[] args) {
System.out.println("Done");
}
}
}
答案 0 :(得分:18)
尝试这样的事情:
java A$B
根据评论更新:
在linux shell中你应该逃避$。所以命令变成了:
java 'A$B'
答案 1 :(得分:10)
就像简单的课程一样。运行命令java A$B
编译内部类时,它前面加上外部类名
在这种情况下,您有两个类文件。即A.class
和A$B.class
java
命令将classname作为参数而不是文件名java A$B
将完成工作OuterClass$1
,OuterClass$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.class
,A$B$1.class
,A$B$2.class
,A$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)