我想知道哪个方法或哪个类调用了MyClass
.
public class MyClass
{
private static int instCount = 0;
public MyClass()
{
instCount++;
System.out.println("MyClass Konstruktor wurde aufgerufen! [" + instCount + "]");
}
}
我想知道哪个方法或哪个类调用了MyClass
.
public class MyClass
{
private static int instCount = 0;
public MyClass()
{
instCount++;
System.out.println("MyClass Konstruktor wurde aufgerufen! [" + instCount + "]");
}
}
You can create an exception without throwing it, and inspect its stack trace to find the call stack.
RuntimeException ex = new RuntimeException();
StackTraceElement[] stackTrace = ex.getStackTrace();
System.out.println(stackTrace[0]);
System.out.println(stackTrace[1]);
Element 0 in the stackTrace
array will be your constructor. Element 1 should be the location from where the constructor was invoked.
构造函数将在对象的实例化时自动调用。如果要限制该行为,则需要将构造函数的访问修饰符设为private
以下是如何获取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()