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 ...
随机推荐
- javascript基础拾遗(四)
1.什么是闭包 正常函数,执行完毕后相关的参数,变量就释放掉了. 当一个函数的返回值是另一个函数时,该函数的相关参数和变量都会保存在返回的函数中,这种结构叫做闭包. 2.示例 计算数组和 functi ...
- 双系统linux+win之血的教训
绝对不要用win的软件来直接调整linux分区!!!!! 除非你不想要这个linux分区里的数据了...
- 【教程】linux下安装Google Chrome
google chrome google浏览器一直都是深受大家喜爱的一个浏览器,而且其跨平台性比较好,这对于书签同步来说是非常重要的.但是在linux下,默认的是火弧浏览器,而google ...
- 【神经网络】神经网络结构在命名实体识别(NER)中的应用
命名实体识别(Named Entity Recognition,NER)就是从一段自然语言文本中找出相关实体,并标注出其位置以及类型,如下图.它是NLP领域中一些复杂任务(例如关系抽取,信息检索等)的 ...
- django配置数据库
配置数据库 Django默认使用SQLite数据库 在settings.py文件中通过DATABASES选项进行数据库配置 配置MySQL Python3.x中安装的是PyMySQL 在__init_ ...
- order by name 注入
order by name id id是一个注入点 可以利用if语句进行注入 order by name ,if(1=1,1,select 1 from information_schema.tabl ...
- mongoDb CPU利用率100%的分析和解决
在公司的项目中,突然出现过一个情况,mongodb 的CPU利用率到达100%,导致服务器这边卡死了,请求了半天无响应,提示请求超时. 因为,当时APP用户可能会在某一个时间段集中的使用,所以,请求量 ...
- # Writing your-first Django-app-part 5 -test
确认bug 写test测试暴露bug 修复bug 更多测试例子 测试一个view The Django test client测试客户端. 提升DemoAppPoll/views.py 测试我们的vi ...
- JVM——代空间的划分
首先看在JVM的堆中,按代的划分: Young:主要是用来存放新生的对象. Old:主要存放应用程序中生命周期长的内存对象. Permanent:是指内存的永久保存区域,主要存放Class和Meta的 ...
- C语言 · 企业奖金发放
算法提高 企业奖金发放 时间限制:1.0s 内存限制:512.0MB 企业发放的奖金根据利润提成.利润低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10 ...