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日

  • 相关阅读:
    【09】绝不在构造和析构过程中调用virtual方法
    【08】别让异常逃离析构函数
    C++ 外部调用private方法
    【07】为多态基类声明virtual析构方法
    C++ 构造过程和析构过程
    理解C# Lazy<T>
    DG
    MongoDB
    sh.status()
    DG
  • 原文地址:https://www.cnblogs.com/heyang78/p/12215151.html
Copyright © 2011-2022 走看看