哪个Java方法称为我的构造函数?

时间:2013-05-30 08:27:50

标签: java class methods constructor call

我想知道哪个方法或哪个类称为MyClass的构造函数。

public class MyClass
{
  private static int instCount = 0;

  public MyClass()
  {
    instCount++;
    System.out.println("MyClass Konstruktor wurde aufgerufen! [" + instCount + "]");
  }
}

3 个答案:

答案 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()