zoukankan      html  css  js  c++  java
  • [Java]取得当前代码所在函数的函数名

    要取得当前运行代码的函数名,可以用:

    Thread.currentThread().getStackTrace()[1].getMethodName();

    但是,这行代码有些过长,嵌入业务代码稍显突兀,这时可以采用下面的共通函数:

        public static String digoutMethodName() {
            return Thread.currentThread().getStackTrace()[2].getMethodName();
        }

    从上面代码可以看出,其本质是取当前线程的调用栈,栈的第一个元素是getStackTrace自己,第二个是digoutMethodName,第三个就是调用digoutMethodName的外界函数了。如果调用层次越深,调用栈越长,最终会到main函数处。

    以下为完整程序:

    package com.ufo.func;
    
    public class Tester {
        public static void main(String[] args) {
            foo();
            bar();
        }
        
        public static void foo() {
            System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
        }
        
        private static int bar() {
            System.out.println(digoutMethodName());
            System.out.println("----------------------");
            printStackMethods();
            return 0;
        }
        
        public static String digoutMethodName() {
            return Thread.currentThread().getStackTrace()[2].getMethodName();
        }
        
        private static void printStackMethods() {
            for(StackTraceElement ste:Thread.currentThread().getStackTrace()) {
                System.out.println(ste.getMethodName());
            }
        }
    }

    输出:

    foo
    bar
    ----------------------
    getStackTrace
    printStackMethods
    bar
    main

    2020年1月19日

  • 相关阅读:
    ASP.NET MVC 动态加载图像
    ASP.NET:以域用户身份访问网络资源
    ASP.NET MVC 动态加载 *.ascx
    4月
    3月
    2月
    每天充点小能量
    每天进步一点点
    FreeMarker标签与使用
    eclipse启动tomcat, http://localhost:8080无法访问
  • 原文地址:https://www.cnblogs.com/heyang78/p/12215151.html
Copyright © 2011-2022 走看看