如果它存在于静态内部类中,如何执行main方法? main方法存在于静态内部类中,我们需要执行该main方法。
class A {
static class B {
public static void main(String[] args) {
System.out.println("Done");
}
}
}
尝试这样的事情:
java A$B
根据评论更新:
在linux shell中你应该逃避$。所以这个命令成了:
java 'A$B'
就像简单的课程一样。运行命令java A$B
编译内部类时,它前面加上外部类名称在这种情况下,您有两个类文件。即A.class
和A$B.class
java
命令将类名作为参数而不是文件名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
。
希望这个例子有点帮助:)
如果您的.java
文件具有内部/嵌套类,则编译后编译将生成这些类作为TheClass $ xxx.class文件。
见this:
内部类定义生成其他类文件。这些类文件具有组合内部和外部类名称的名称,例如MyClass $ MyInnerClass.class。
所以你应该这样做:java A$B
。
如果你想用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.
但这是非标准的......