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日

  • 相关阅读:
    iOS开发-ScrollView图片缩放
    算法-随机不重复数列生成
    iOS开发-舒尔特表
    iOS开发-音乐播放
    iOS开发-简单的图片查看器
    iOS开发-Interface Builder的前世今生
    iOS开发-DatePicker控件
    iOS开发-UI基础Demo
    Objective-C-Category类别
    Objective-C面向对象之实现类
  • 原文地址:https://www.cnblogs.com/heyang78/p/12215151.html
Copyright © 2011-2022 走看看