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 的您一份参考。

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

时间: 2024-10-04 14:07:45

Java学习-025-类名或方法名应用之一 -- 调试源码的相关文章

Java学习-024-获取当前类名或方法名二三文

今天,看朋友编写程序,打印日志时,需要记录当前类的类名以及当前方法的方法名,我发现 TA 将类名或者方法名直接写死在了代码中...虽说这样可以实现记录类名和方法名,但是当有特殊情况需要修改类名或者方法名时,源码中涉及类名或者方法名的地方必须同步变更,若修改的地方比较多,难免可能发生有遗漏的地方,那么后续通过日志查看分析原因时,就会找不到相应的地方,导致无法分析,查找原因. 为何要获取类名? 调试源码 记录日志 生成报告 统计分析,对调用比例占比大的方法,增强单元测试 构建系统调用关系链,对主要关

Java中获取文件名、类名、方法名、行号的方法

??在C语言中,可以通过宏FILE.LINE来获取文件名和行号,在Java语言中,则可以通过StackTraceElement类来获取文件名.类名.方法名.行号,具体代码如下: public static int getLineNumber( ){ StackTraceElement[] stackTrace = new Throwable().getStackTrace(); return stackTrace[1].getLineNumber( ); } public static Stri

OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2013-03-23 17:44 16963人阅读 评论(28) 收藏 举报 分类: 机器视觉(34) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] KAZE系列笔记: OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 OpenCV学习笔记(28)KA

【小白的java成长系列】——String类的深入分析(基于源码)

接着前面面向对象来说吧~今天来说说String类..其实String类也包含很多面向对象的知识的~ 首先来问一个问题:我们在开发过程中,如果要使用一个类的话,就要创建对象,这句话没什么问题吧~在实际开发的时候确实是这样的,只有创建了对象才能真正的去使用一个普通的类,我们一般创建对象,几乎所有的类创建对象都是要通过new关键字来创建的~ 问题就来了..为什么我们的String可以直接写成String str = "abc";这样子呢? 当然String类也可以通过new来创建对象的...

Java开源生鲜电商平台-用户表的设计(源码可下载)

Java开源生鲜电商平台-用户表的设计(源码可下载) 说明:由于该系统属于B2B平台,不设计到B2C的架构. 角色分析:买家与卖家. 由于买家与卖家所填写的资料都不一样,需要建立两站表进行维护,比如:buyer,seller. 这样进行数据库的解耦,任何一方的变动都互不影响,但是我想集中式管理,以及一些业务个性化要求,我就增加了一个users表.表结构如下: 账号唯一键,所以做了唯一键索引, 账号的准确性采用手机短信验证. 根据类型区分买家与卖家,登陆的时候,采用的就是users这种表进行维护

java画图程序_图片用字母画出来_源码发布_版本二

在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_imagehandler_result1.png 运行效果2: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_imagehandler_res

java画图程序_图片用字母画出来_源码发布

在之前写了一篇blog:java画图程序_图片用字母画出来 主要是把一些调试的截图发布出来,现在程序调试我认为可以了(当然,你如果还想调试的话,也可以下载源码自己调试). 就把源码发布出来. 项目结构: 资源文件: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356471/o_imagehandler_resource.png 运行效果: 原图:http://images.cnblogs.com/cnblogs_com/hongten/356

Java开源生鲜电商平台-销售管理设计与架构(源码可下载)

Java开源生鲜电商平台-销售管理设计与架构(源码可下载) 说明:在Java开源生鲜电商平台中,销售人员我们称为跟餐饮店老板沟通与下载APP的一类地推人员.(所谓地推指的就是一个一个上门拜访.) 由于销售人员有以下几类特性: 1. 时间随意性,他们并不类似技术或者性质人员,需要天天呆在办公室,他们是需要去外面,时间上具有随意性. 2. 行动随意性 ,他们的行动过于随意,每天也不用来打卡,每天就是按照计划去拜访客户,然后推销生鲜电商APP,让客户来进行下单,那么行为很随意,站在公司的角度 我们是没

Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件

关注finddreams,一起分享,一起进步!http://blog.csdn.net/finddreams/article/details/45569089 在开发中,我们常常用打印log的方式来调试我们的应用.在Java中我们常常使用方法System.out.println()来在控制台打印日志,以便我们的调试.Android中有一个专门的类Log来实现在Android系统下日志的打印,更加方便我们定位程序出现问题的地方. 但是Android官方提供的Log类在实际项目使用中,也不是非常方便