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 ...
随机推荐
- webstorm的快捷键和zencoding
1.webstorm快捷键: 生成viewport, meta:vp IntelliJ-Idea 的快捷键 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*…*/ ) Shift+F6 ...
- 【转】(二)unity4.6Ugui中文教程文档-------概要-UGUI Canvas
原创至上,移步请戳:(二)unity4.6Ugui中文教程文档-------概要-UGUI Canvas UI系统允许您快速.直观地创建用户界面(Ui).这是Unity的新 UI 系统的主要功能介绍. ...
- java 多线程 28 : 多线程组件之 Semaphore 信号量
Semaphore是非常有用的一个组件,它相当于是一个并发控制器,是用于管理信号量的.构造的时候传入可供管理的信号量的数值,这个数值就是控制并发数量的,就是同时能几个线程访问.我们需要控制并发的代码, ...
- delphi调用webservice (.NET C#版)
uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...
- One-hot 编码/TF-IDF 值来提取特征,LAD/梯度下降法(Gradient Descent),Sigmoid
1. 多值无序类数据的特征提取: 多值无序类问题(One-hot 编码)把“耐克”编码为[0,1,0],其中“1”代表了“耐克”的中 间位置,而且是唯一标识.同理我们可以把“中国”标识为[1,0],把 ...
- Android 开发自己的网络收音机3——电台分类(ExpandableListView)
上一篇文章说了使用SlidingMenu开源项目实现侧滑栏,今天主要是讲解多级列表ExpandableListView的使用,以及如何使用它实现电台分类管理.ExpandableListView是An ...
- Unity2017与Visual Studio2017的兼容问题
Unity2017中新建脚本后,用Visual Studio2017打开发现不兼容. 方法一:管理员权限运行Unity. 方法二:打开Visual Studio Installer,下载Unity相关 ...
- C语言 · 最长字符串
算法训练 最长字符串 时间限制:1.0s 内存限制:512.0MB 求出5个字符串中最长的字符串.每个字符串长度在100以内,且全为小写字母. 样例输入 one two three ...
- Py2.7 no module named tkinter
一个简单的例子 #! /usr/bin/env python#coding=utf-8from tkinter import *Label(text="Spam").pack()m ...
- Crystal Reports 版权疑问
以前一直以为Crystal Reports是微软公司的产品,由于最近公司项目用到Crystal Reports,花了点时间研究了下它,才发现其实不然. 历史: 最开始的开发公司名为Crystal Se ...