我想知道哪个方法或哪个类称为MyClass
的构造函数。
public class MyClass
{
private static int instCount = 0;
public MyClass()
{
instCount++;
System.out.println("MyClass Konstruktor wurde aufgerufen! [" + instCount + "]");
}
}
答案 0 :(得分:7)
您可以在不抛出异常的情况下创建异常,并检查其堆栈跟踪以找到调用堆栈。
RuntimeException ex = new RuntimeException();
StackTraceElement[] stackTrace = ex.getStackTrace();
System.out.println(stackTrace[0]);
System.out.println(stackTrace[1]);
stackTrace
数组中的元素0将是您的构造函数。元素1应该是调用构造函数的位置。
答案 1 :(得分:0)
将在Object的实例化时自动调用构造函数。如果要限制该行为,则需要将构造函数的访问修饰符设为private
答案 2 :(得分:0)
以下是获取调用Class.method()
构造函数的MyClass()
名称的方法。
public static void main(String[] args) {
new MyClass();
}
public MyClass() {
StackTraceElement[] stackTrace = new Exception().getStackTrace();
System.out.println(stackTrace[1]); // prints MyClass.main(MyClass.java:7)
}
我们抛出异常但是及时捕获它正如下面的@Henrik所指出的,我们不需要抛出异常来检查堆栈跟踪。但是,如果需要,我们可以进一步解析捕获的调用方法文本,以删除Java文件的名称,如下所示。
System.out.println(
stackTrace[1].toString().split("\\(")[0]+"()"); // prints MyClass.main()