Java学习-025-类名或方法名应用之一 -- 调试源码

上文讲述了如何获取类名和方法名,敬请参阅: Java学习-024-获取当前类名或方法名二三文

通常在应用开发中,调试或查看是哪个文件中的方法调用了当前文件的此方法,因而在实际的应用中需要获取相应的包名、类名、方法名、行数,从而快速定位,及统计方法被调用的次数,生成类方法关系链。

相信爱钻研的小主们,通过上篇文章,已经懂得了,如何获取主调方法、从调方法。那我直接上码了,敬请各位小主参阅,若有不足之处,敬请各位大神指正,不胜感激!

GetClassMethodName.java 源码内容如下所示:

/**
 * Aaron.ffp Inc.
 * Copyright (c) 2004-2015 All Rights Reserved.
 */
package com.java.demo;

import org.testng.annotations.Test;

/**
 * Get information of class and method
 * 
 * @author Aaron.ffp
 * @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java, 2015-8-13 10:58:39 Exp $
 */
public class GetClassMethodName extends InvokeClass{

    
    /**
     * Debug code demo use Exception
     * 
     * @author Aaron.ffp
     * @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java test_invokeMethod_001, 2015-8-14 12:50:32 Exp $
     *
     */
    @Test
    public void test_invokeMethod_001(){
        System.out.println(" ====== Main Invoke Method : GetClassMethodName.test_invokeMethod_001() =========================== ");
        this.invokeMethod_001();
    }
    
    /**
     * Debug code demo use Thread
     * 
     * @author Aaron.ffp
     * @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java test_invokeMethod_002, 2015-8-14 12:51:33 Exp $
     *
     */
    @Test
    public void test_invokeMethod_002(){
        System.out.println(" ====== Main Invoke Method : GetClassMethodName.test_invokeMethod_002() =========================== ");
        this.invokeMethod_002();
    }
}

 

InvokeClass.java 源码内容如下所示:

/**
 * Aaron.ffp Inc.
 * Copyright (c) 2004-2015 All Rights Reserved.
 */
package com.java.demo;

import com.demo.HelperReporter;


/**
 * Invoked class
 * 
 * @author Aaron.ffp
 * @version V1.0.0: Jsoup com.java.demo InvokeClass.java, 2015-8-14 01:15:12 Exp $
 */
public class InvokeClass extends HelperReporter{
    /**
     * By Exception
     * 
     * @author Aaron.ffp
     * @version V1.0.0: Jsoup com.java.demo InvokeClass.java invokeMethod_001, 2015-8-14 01:15:51 Exp $
     *
     */
    public void invokeMethod_001(){
        StackTraceElement[] ste = new Exception().getStackTrace();
        
        System.out.println(" ====== Invoked Method : InvokeClass.invokeMethod_001() =========================== ");
        
        for (int i = 0; i < ste.length; i++) {
            if (i > 1) {
                break;
            }
            
            System.out.println("ste[" + i + "].getClassName()" + "\t" + ste[i].getClassName() + "\n" +
                               "ste[" + i + "].getFileName()" + "\t" + ste[i].getFileName() + "\n" +
                               "ste[" + i + "].getMethodName()" + "\t" + ste[i].getMethodName() + "\n" +
                               "ste[" + i + "].getLineNumber()" + "\t" + ste[i].getLineNumber() + "\n"
                               );
        }
    }
    
    /**
     * By Thread
     * 
     * @author Aaron.ffp
     * @version V1.0.0: Jsoup com.java.demo InvokeClass.java invokeMethod_002, 2015-8-14 01:16:19 Exp $
     *
     */
    public void invokeMethod_002(){
        StackTraceElement[] ste = Thread.currentThread().getStackTrace();
        
        System.out.println(" ====== Invoked Method : InvokeClass.invokeMethod_002() =========================== ");
        
        for (int i = 0; i < ste.length; i++) {
            if (i < 1 || i > 2) {
                continue;
            }
            
            System.out.println("ste[" + i + "].getClassName()" + "\t" + ste[i].getClassName() + "\n" +
                               "ste[" + i + "].getFileName()" + "\t" + ste[i].getFileName() + "\n" +
                               "ste[" + i + "].getMethodName()" + "\t" + ste[i].getMethodName() + "\n" +
                               "ste[" + i + "].getLineNumber()" + "\t" + ste[i].getLineNumber() + "\n"
                              );
        }
    }
}

 

源码运行结果如下所示:

 

在实际应用中,各位小主参照此方法进行相应的变更即可,也可将此相关信息封装成方法,定制适合测试框架等的输出,注意通过 Exception 或 Thread 获取相关信息时的不同(此部分后续会做一些简单的示例,给各位小主参阅,敬请期待)!

 

至此, Java学习-025-类名或方法名应用之一 -- 调试源码 顺利完结,希望此文能够给初学 Java 的您一份参考。

最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

 

posted @ 2015-08-14 01:21  范丰平  Views(388)  Comments(0Edit  收藏  举报