2

我正在尝试找到一种复制此 C 功能的通用方法:

int main(int argc, char** argv){
    fprintf(2,"%s: error you did something wrong.\n", argv[0]);
    return 1;
}

在爪哇。到目前为止,唯一的方法是将其硬编码到应用程序中,这很难看。我想得到类似的东西:

someObj.getClass().getSimpleName();

在我的静态主目录中,不参考我自己的课程。

这甚至可能吗?

编辑

我搜索了一个好小时并没有打开这个。

重复的问题,请参阅Java 中的 $0(程序名称)?发现主要课程?求答案

4

3 回答 3

0

java 查找要在其中运行的类的方式static void main()是通过传递给 java 可执行文件(和类路径)的名称。因此,除非传递了正确的名称,否则不可能进行主运行。

*好吧,除非找到的 main 调用类似“FooBar.main()”或使用类加载器来找到它。

即使这样,由于 main 是静态的并且静态函数不是虚拟的,所以调用任何 main 都是因为 main 是在该类上调用的。因此,在您的代码中,名称(未将 args 传递给 main)只是该main函数所在的类的名称。

所以永远不会有错误,所以永远不需要找到名字。

于 2009-04-04T23:52:30.687 回答
0

我唯一能想到的是,你确定哪个线程是主线程,获取那个线程的堆栈跟踪,然后回到堆栈顶部并询问元素的类名和方法名,看看它是否是你想要什么。

不过,这很恶心。我会重新考虑最初的要求,看看是否没有更直接的方法来实现你想要的。

于 2009-04-05T00:01:13.520 回答
0

我不认为这是可能的。最简单的打印方法是使用 MyClass.class.getSimpleName(),或者您可以创建(而不是抛出)一个 Throwable,打印堆栈跟踪,然后从那里开始。

于 2009-04-05T00:09:19.663 回答