Java 查找对象在哪个类中实例化

Java 查找对象在哪个类中实例化,java,eclipse,instance,instantiation,call-hierarchy,Java,Eclipse,Instance,Instantiation,Call Hierarchy,我试图学习不必要的复杂源代码。有一个方法public void passObject(SomeObject SomeObject),我想知道哪个类SomeObject是在其中实例化的。问题是,当我们向上遍历调用层次结构时,分支因子非常大。例如,三个方法可以通过passObject传递someObject,并且在这三个方法分别传递同一对象之前有三个方法 是否有一些方法可以插入passObject中,例如: public void passObject(SomeObject someObject)

我试图学习不必要的复杂源代码。有一个方法
public void passObject(SomeObject SomeObject)
,我想知道哪个类
SomeObject
是在其中实例化的。问题是,当我们向上遍历调用层次结构时,分支因子非常大。例如,三个方法可以通过
passObject
传递
someObject
,并且在这三个方法分别传递同一对象之前有三个方法

是否有一些方法可以插入
passObject
中,例如:

public void passObject(SomeObject someObject) {
    whereDidThisComeFrom(someObject); // Should print the class (perhaps) where someObject was instantiated.
    //
    //do the other stuff that passObject is supposed to do.
}

我使用的是
Eclipse

的确,使用“Show-Call-Hierachy”可以显示太多的结果,无法真正让您了解执行流程

相反,您可以尝试在调试模式下使用Eclipse,并在
passObject(SomeObject-SomeObject)
的第一行上放置一个断点。然后您将看到当前堆栈跟踪。通过检查堆栈跟踪上的代码,可以确定实际发生的调用层次结构


或者,如果无法调试,是否可以在
passObject(SomeObject SomeObject)
中添加另一行以打印当前堆栈跟踪?有关详细信息,请参阅。

使用“显示调用层次结构”确实会显示太多的结果,无法真正让您了解执行流程

相反,您可以尝试在调试模式下使用Eclipse,并在
passObject(SomeObject-SomeObject)
的第一行上放置一个断点。然后您将看到当前堆栈跟踪。通过检查堆栈跟踪上的代码,可以确定实际发生的调用层次结构


或者,如果无法调试,是否可以在
passObject(SomeObject SomeObject)
中添加另一行以打印当前堆栈跟踪?有关详细信息,请参阅。

最简单/最脏的方法是将
(新异常(“测试”)).printStackTrace()放入
某个对象的构造函数中并运行代码。每次实例化
SomeObject
时,都会在控制台上打印堆栈跟踪


Eclipse还支持构造函数中的断点,因此您可以设置断点并进行调试。

最简单/最脏的方法是将
(新异常(“测试”).printStackTrace()放入
某个对象的构造函数中并运行代码。每次实例化
SomeObject
时,都会在控制台上打印堆栈跟踪


Eclipse还支持构造函数中的断点,因此您可以设置断点并进行调试。

我不知道断点是否相同,但请检查此线程:我不知道断点是否相同,但请检查此线程:您可以在不创建异常的情况下获得堆栈跟踪。看到我回答中的链接了吗?我没有说这是一个很棒的代码,我说它很简单。这真的很好,解决了我的问题。谁在乎它是否有点脏,它工作得非常出色。你可以在不创建异常的情况下获得堆栈跟踪。看到我回答中的链接了吗?我没有说这是一个很棒的代码,我说它很简单。这真的很好,解决了我的问题。谁在乎它是否有点脏,它工作得很好。