Daw*_*wid 2 java command-line-arguments
我发现了以下问题: Java中的$ 0(程序名)?发现主要课程? 但接受的答案在这种情况下失败了:
public class Derived extends Base { }
class Base {
    public static void main(String[] args){
        System.out.println(getTheClassName());
    }
    static String getTheClassName(){
        StackTraceElement[] stack = Thread.currentThread().getStackTrace();
        StackTraceElement main = stack[stack.length - 1];
        return main.getClassName();
    }
}
致电时:
java Derived
遗憾的是,输出Base并不Derived像预期的那样.
是否有可能获得真正的主类名称?(btw.jps工具正确检测主类,但要获得正确的名称,我需要知道当前VM的ID,这也是一个问题)
最好的祝福.
编辑:确切地说:我需要知道作为传递给JVM的命令行参数传递的类的名称是什么.jps工具按我想要的方式进行,但由于其他问题(例如未知的VMid),我无法使用此工具.
Edit2:全球回复Thorbjørn的回答:
对于您的工作方法,您需要使用非静态方法.使它成为非静态的,在Derived中有一个main()做一个新的Derived().getTheClassName()
我想知道我可以在Derived类中实现main方法而得到名称.
解决方案:我将提供(Thorbjørn和erickson的)初始化Derived类的机制;-)所有答案都非常有用.我接受托尔比约恩的becase的他张贴了他的答案早于埃里克森.谢谢.
静态方法属于它们所定义的类,而不属于类的实例(与静态/非静态方法相同).因此,当您在getTheClassName中时,您处于Base类中定义的静态方法中.
对于您的工作方法,您需要使用非静态方法.使它成为非静态的,在Derived中有一个main()做一个新的Derived().getTheClassName()