我目前必须处理现有的Java应用程序,在该应用程序中,我可以将some.java文件过滤为完整的死代码,从而删除它们。 问题在于没有任何评论或其他提示,这些类不是用于生产目的,调用层次结构令人困惑,写这篇文章的人当然已经消失了。
我只是通过在代码中手动放置System.out.println调试消息来发现,这表明构造函数或方法是否已被占用。如果它是一个在运行时被实例化的类,那就相当好了,因为那样我就可以放置一个
public class public TestObjectClass
{
public TestObjectClass(String whatever) // this is the constructor
{
System.out.println("Constructor of class " + getClass() + " entered");
/* some other code folowed */
} // end constructor
} // end class
如果日志没有指出这条消息,我知道整个类从未使用过,那么就不需要在所有方法中放置调试语句(这些类中没有静态方法)。
但是有些类没有使用新语句创建对象,因此没有明确的构造函数。因此,我必须在每种方法中放置以下内容,以便找出是否使用
public class ClassThatIsNotInstantiated
{
public void someMethodXYZ()
{
System.out.println("someMethodXYZ in " + getClass + " is entered.");
/* some other code followed */
} // end method
} // end class
我当然想到了Logger类,它至少表明指针当前在哪个类中......
答案 0 :(得分:2)
LOG4J可以做到这一点。将PatternLayout与“C”和“M”转换模式一起使用。但是要小心 - 它们会达到性能(尤其是方法名称 - 获取方法名称 - 捕获异常)。更多信息: https://logging.apache.org/log4j/2.x/manual/layouts.html
但在你的情况下,使用方面可能更好。检查AspectJ。它允许您为每个执行的方法打印日志
答案 1 :(得分:1)
如前所述,您可以使用AOP和AspectJ自动注入调试语句。
否则,您可以使用UCDetector
之类的工具