这么输出吧:public class Test1 { public static void main(String[] args) { Test1 t1 = new Test1(); t1.fun();
}
public void fun(){ //输出方法名 getFunName(Thread.currentThread().getStackTrace()); } public void getFunName(StackTraceElement e[]) { boolean doNext = false; for (StackTraceElement s : e) { if (doNext) { System.out.println(s.getMethodName()); return; } doNext = s.getMethodName().equals("getStackTrace"); } } }
你这样看看: class Foo{ public void testFun(){ System.out.println("aaa:"+this.getClass().getMethods()[0]); } public static void main(String[] args) { new Foo().testFun(); } }
[code=Java] import java.lang.reflect.Method; Class Foo { public void testFun() { Class clz = Foo.class; Method[] methods = clz.getDeclaredMethods(); for (Method m : methods) { System.out.println(m.getName()); } } }
Thread current = Thread.currentThread(); StackTraceElement[] elements = current.getStackTrace(); System.out.println(elements[1].getMethodName());
Thread current = Thread.currentThread(); StackTraceElement[] elements = current.getStackTrace(); Class clazz = this.getClass(); System.out.println(clazz.getName()+"."+elements[1].getMethodName());
呵呵,不好意思,CNDS很少上。不过[0]貌似不对,这个时候另外调了currentThread()和getStackTrace(),栈顶已经不是我自己的方法了。这么写就能输出正确结果啦。总之学到了,谢谢。[code=Java] class Foo {
public Foo() {
}
public void testFun1() { System.out.println(FunUtil.getFunName()); }
public void testFun2() { System.out.println(FunUtil.getFunName()); }
public void testFun3() { System.out.println(FunUtil.getFunName()); }
}class FunUtil {
public final static String getFunName() { Thread current = Thread.currentThread(); // 当前线程 StackTraceElement[] elems = current.getStackTrace(); // 调用的堆栈信息 int idx = 3; return elems[idx].getClassName() + "." + elems[idx].getMethodName(); } } [code]
public static void main(String[] args) {
Class test = Test.class;
Method[] methods = test.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
System.out.println(test.getName()+"."+methods[i].getName());
}
}
}
StackTraceElement[] elems = current.getStackTrace(); // 调用的堆栈信息
StackTraceElement 里面大把函数供你玩:
String getClassName()
String getFileName()
int getLineNumber()
String getMethodName()
不知道我2楼的代码,楼主看懂了么?System.out.println(elems[0].getClassName() + "." + elems[0].getMethodName());
Test1 t1 = new Test1();
t1.fun();
}
public void fun(){
//输出方法名
getFunName(Thread.currentThread().getStackTrace());
} public void getFunName(StackTraceElement e[]) {
boolean doNext = false;
for (StackTraceElement s : e) {
if (doNext) {
System.out.println(s.getMethodName());
return;
}
doNext = s.getMethodName().equals("getStackTrace");
}
}
}
class Foo{
public void testFun(){
System.out.println("aaa:"+this.getClass().getMethods()[0]);
}
public static void main(String[] args) {
new Foo().testFun();
}
}
import java.lang.reflect.Method;
Class Foo {
public void testFun() {
Class clz = Foo.class; Method[] methods = clz.getDeclaredMethods(); for (Method m : methods) { System.out.println(m.getName()); }
}
}
Thread current = Thread.currentThread();
StackTraceElement[] elements = current.getStackTrace();
System.out.println(elements[1].getMethodName());
Thread current = Thread.currentThread();
StackTraceElement[] elements = current.getStackTrace();
Class clazz = this.getClass();
System.out.println(clazz.getName()+"."+elements[1].getMethodName());
class Foo {
public Foo() {
}
public void testFun1() {
System.out.println(FunUtil.getFunName());
}
public void testFun2() {
System.out.println(FunUtil.getFunName());
}
public void testFun3() {
System.out.println(FunUtil.getFunName());
}
}class FunUtil {
public final static String getFunName() {
Thread current = Thread.currentThread(); // 当前线程
StackTraceElement[] elems = current.getStackTrace(); // 调用的堆栈信息
int idx = 3;
return elems[idx].getClassName() + "." + elems[idx].getMethodName();
}
}
[code]