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

今天,看朋友编写程序,打印日志时,需要记录当前类的类名以及当前方法的方法名,我发现 TA 将类名或者方法名直接写死在了代码中。。。虽说这样可以实现记录类名和方法名,但是当有特殊情况需要修改类名或者方法名时,源码中涉及类名或者方法名的地方必须同步变更,若修改的地方比较多,难免可能发生有遗漏的地方,那么后续通过日志查看分析原因时,就会找不到相应的地方,导致无法分析,查找原因。

为何要获取类名?

  1. 调试源码
  2. 记录日志
  3. 生成报告
  4. 统计分析,对调用比例占比大的方法,增强单元测试
  5. 构建系统调用关系链,对主要关系链或多分支方法重点测试,加强业务、功能、安全、性能等方面的测试

上述各作用,会逐步进行相应的简述,敬请期待!感兴趣的小主可先自行研究。

那么我们该如何获取对应的类名和方法名呢?其实,在 JDK 中早就提供了相关的方法或者途径获取相应的类名或方法名。不知道大家之前在调试 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{
    /**
     * Get information of class
     *
     * @author Aaron.ffp
     * @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java test_getClassName, 2015-8-14 12:09:07 Exp $
     *
     */
    @Test
    public void test_getClassName(){
        System.out.println("this.getClass()\t\t\t\t" + this.getClass());
        System.out.println("this.getClass().getName()\t\t" + this.getClass().getName());
        System.out.println("this.getClass().getSimpleName()\t\t" + this.getClass().getSimpleName() + "\n");
    }

    /**
     * Get information of method
     *
     * @author Aaron.ffp
     * @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java test_getMethodName, 2015-8-14 12:10:02 Exp $
     *
     */
    @Test
    public void test_getMethodName(){
        // get info by exception
        StackTraceElement[] ste = new Exception().getStackTrace();

        for (int i = 0; i < ste.length; i++) {
            if (i > 0) {
                break;
            }
            System.out.println("ste[" + i + "].getFileName()" + "\t\t" + ste[i].getFileName() + "\n" +
                               "ste[" + i + "].getClassName()" + "\t\t" + ste[i].getClassName() + "\n" +
                               "ste[" + i + "].getLineNumber()" + "\t\t" + ste[i].getLineNumber() + "\n" +
                               "ste[" + i + "].getMethodName()" + "\t\t" + ste[i].getMethodName() + "\n");
        }

        // get info by Thread
        ste = Thread.currentThread().getStackTrace();

        for (int i = 0; i < ste.length; i++) {
            if (i != 1) {
                continue;
            }

            System.out.println("ste[" + i + "].getFileName()" + "\t\t" + ste[i].getFileName() + "\n" +
                    "ste[" + i + "].getClassName()" + "\t\t" + ste[i].getClassName() + "\n" +
                    "ste[" + i + "].getLineNumber()" + "\t\t" + ste[i].getLineNumber() + "\n" +
                    "ste[" + i + "].getMethodName()" + "\t\t" + ste[i].getMethodName() + "\n");
        }
    }
}

程序执行结果如下所示:

至此, Java学习-024-获取当前类名或方法名二三文 顺利完结,希望此文能够给初学 Java 的您一份参考。

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

时间: 2024-10-17 18:48:13

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

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

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

java反射机制,通过类名获取对象,通过方法名和参数调

try {//得到对象Class c = Class.forName("完整类名");Object yourObj = c.newInstance();//得到方法Method methlist[] = cls.getDeclaredMethods();for (int i = 0; i < methlist.length; i++) {Method m = methlist[i];}//获取到方法对象,假设方法的参数是一个int,method名为setAgeMethod sAg

Java学习-021-Properties 获取配置项对应的值

在日常的脚本编写过程中,通常会获取配置文件中的配置项,以执行相应的业务逻辑. 小二上码...若有不足之处,敬请大神指正,不胜感激! 获取配置项值的源码如下所示: 1 /** 2 * Get value from properties by key. Return null when the key not exist. 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools

java通过反射获取调用变量以及方法

一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 1 @Test 2 // 通过反射获取类定义的方法 3 public void testMethod() throws Exception { 4 @SuppressWarnings("rawtypes") 5 Class clazz = Class.forName("java.lang.String"); 6 Method[] m = clazz.g

Java学习之路(三) 方法

方法的定义 修饰符 返回类型 方法名(参数){ 方法体 } public class text { public static void add(){ /** * 静态方法 * 调用方法:add2(): */ System.out.println("add------"); } public static int add3(int a){ // 带有返回值的方法 a = a+4; return a; } public static void main(String[] args) {

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

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

输出类名,方法名以及行数等log信息

public static void print(String text){    boolean debug = true;    if (debug) {        Context context = BaseApp.getContext();        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];        // 获取类名.即包名+类名        String

Java中的标识符,类名和包名规则

Java中的包.类.方法.参数和变量的名称 标识符的命名规则 1.变量必须以字母.下划线(_)或美元符号($)开头 2.余下的字符可以是下划线.美元符号或任何的字母或数字 3.不能使用JavaScript中的关键字或者保留字做为变量名称 Pascal规则(帕斯卡命名法) :单字之间不以空格断开或连接号(-).底线(_)连结,第一个单字首字母采用大写字母:后续单字的首字母亦用大写字母,例如:FirstName. LastName.每一个单字的首字母都采用大写字母的命名格式,被称为"Pascal命名

Android获取Java类名/文件名/方法名/行号

/** * Android打印方法路径 */ public static void printMethodPath() { //new 一个异常类 Exception exception = new Exception(); //调用者上级类名 Log.i(TAG, "Class0———>:" + exception.getStackTrace()[0].getClassName()); //调用者上级的上级类名 Log.i(TAG, "Class1———>:&q