Java获取正在执行的函数名
利用StackTrace堆栈轨迹获取某个时间的调用堆栈状态。
package com.dsp.demo;
public class TechDemo {
public static void main(String[] args) {
System.out.println("Hello dsp!");
System.out.printf("%x\n", 2129);
aMethod();
}
private static String getExecutingMethodName() {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
StackTraceElement e = stackTrace[2];
return e.getMethodName();
}
private static void aMethod() {
System.out.println("######### aMethod #########");
//String executingMethodName = Thread.currentThread().getStackTrace()[2].getMethodName();
String executingMethodName = getExecutingMethodName();
System.out.println(executingMethodName);
String className = Thread.currentThread().getStackTrace()[2].getClassName();
System.out.println(className);
String fileName = Thread.currentThread().getStackTrace()[2].getFileName();
System.out.println(fileName);
System.out.println("******** aMethod ******");
bMethod();
}
private static void bMethod() {
System.out.println("######### bMethod #########");
// String executingMethodName = Thread.currentThread().getStackTrace()[2].getMethodName();
String executingMethodName = getExecutingMethodName();
System.out.println(executingMethodName);
String className = Thread.currentThread().getStackTrace()[2].getClassName();
System.out.println(className);
String fileName = Thread.currentThread().getStackTrace()[2].getFileName();
System.out.println(fileName);
System.out.println("******** bMethod ******");
cMethod();
}
private static void cMethod() {
System.out.println("######### cMethod #########");
String executingMethodName = getExecutingMethodName();
System.out.println(executingMethodName);
String className = Thread.currentThread().getStackTrace()[2].getClassName();
System.out.println(className);
String fileName = Thread.currentThread().getStackTrace()[2].getFileName();
System.out.println(fileName);
saveA();
updateB();
System.out.println("******** cMethod ******");
}
public static void saveA() {
System.out.println("######### saveA #########");
// ###
String executingMethodName = getExecutingMethodName();
System.out.println(executingMethodName);
// ###
String name = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println(name);
System.out.println("******** saveA ******");
}
public static void updateB() {
System.out.println("######### updateB #########");
String executingMethodName = getExecutingMethodName();
System.out.println(executingMethodName);
System.out.println("******** updateB ******");
}
}
执行结果:
Hello dsp!
851
######### aMethod #########
aMethod
com.dsp.demo.TechDemo
TechDemo.java
******** aMethod ******
######### bMethod #########
bMethod
com.dsp.demo.TechDemo
TechDemo.java
******** bMethod ******
######### cMethod #########
cMethod
com.dsp.demo.TechDemo
TechDemo.java
######### saveA #########
saveA
saveA
******** saveA ******
######### updateB #########
updateB
******** updateB ******
******** cMethod ******


另附:
Java获取正在执行的函数名的更多相关文章
- C#获得当前执行的函数名、当前代码行、源代码文件名
http://blog.csdn.net/newegg2009/article/details/6220385 C#获得当前执行的函数名.当前代码行.源代码文件名 [日期:2010-10-18 11: ...
- Java: 获取当前执行位置的文件名/类名/方法名/行号
在 JAVA 程序有时需要获取当前代码位置, 于是就利用 Thread.currentThread().getStackTrace() 写了下面这个工具类, 用来获取当前执行位置处代码的文件名/类名/ ...
- PHP获取当前类名、函数名、方法名
PHP获取当前类名.方法名 __CLASS__ 获取当前类名 __FUNCTION__ 当前函数名(confirm) __METHOD__ 当前方法名 (bankcard::confirm) _ ...
- PHP获取类名及所有函数名
PHP获取当前类名.方法名 __CLASS__ 获取当前类名 __FUNCTION__ 当前函数名(confirm) __METHOD__ 当前方法名 (bankcard::confirm) _ ...
- Java获取多线程执行结果方式的归纳与总结
在日常的项目开发中,我们会经常遇到通过多线程执行程序并需要返回执行结果的场景,下面我们就对获取多线程返回结果的几种方式进行一下归纳,并进行简要的分析与总结. 一.Thread.join 在一些简单的应 ...
- java 获取 正在执行的方法名
//获取调用该方法的方法名.... String method = Thread.currentThread().getStackTrace()[2].getMethodName(); //获取正在执 ...
- java获取当前执行文件的路径
需要知道执行jar包时,jar包所在的路径. 开始使用了 p.getClass().getResource("/").getPath(); 结果在IDE里面使用是好的,但是在命令行 ...
- 【Python】动态获取python类名、函数名&多线程
import time import random import threading import inspect def get_current_function_name(): return in ...
- Python学习总结11:获取当前运行类名和函数名
一. 使用内置方法和修饰器方法获取类名.函数名 1. 外部获取 从外部的情况好获取,可以使用指向函数的对象,然后用__name__属性. def a(): pass a.__name__ 或者 get ...
随机推荐
- 每天一个linux命令(7):whereis 命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...
- libevent源码分析:event_add、event_del
event_add.event_del两个函数分别是使event生效和失效的,下面就来看一下两个函数的实现. event_add int event_add(struct event *ev, con ...
- 查看SQL实际内存占用
如果打开了AWE,在任务管理器中就看不到实际的内存使用了.可以用SQL语句来查内存占用,或是“性能监视器(Performance Monitor)中的SQLServer: Memory Manager ...
- hdu1839(二分+优先队列,bfs+优先队列与spfa的区别)
题意:有n个点,标号为点1到点n,每条路有两个属性,一个是经过经过这条路要的时间,一个是这条可以承受的容量.现在给出n个点,m条边,时间t:需要求在时间t的范围内,从点1到点n可以承受的最大容量... ...
- Vmware 注册服务 开机自启
现在的服务器性能往往过剩,利用虚拟机可以提高服务器的利用效率.VMware是一款很好的虚拟机软件,但是其WorkSation版本并不支持开机自动启动,支持开机自启的Server又长年没有更新,已经无法 ...
- log4e下载地址
Log4e的插件的下载地址:log4e.jayefem.de/content/view/3/1/
- [转]Tomcat启动报错:AnnotationConfigBeanDefinitionParser are only available on JDK 1.5 and higher
原文地址:https://blog.csdn.net/daochuwenziyao/article/details/54949151 问题描述: 控制台输出AnnotationConfigBeanDe ...
- 腾讯云CentOS 安装 Hadoop 2.7.3
1.安装 jdk yum install java 2.安装maven wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.0/binar ...
- ANT配合FIS执行前端打包任务
<target name="help"> <exec executable="cmd"> <arg value="/c& ...
- "No user exists for uid 501"
"No user exists for uid 501" 问题表现:git操作远端失败. iterm2的问题,更改了配置可能导致这个问题,最简单的解决办法,退出客户端后重启.重 ...