Class Foo {    public void testFun() {        //我要在控制台输出正在调用的方法名,也就是"Foo.testFun"    }}

解决方案 »

  1.   

    package com;import java.lang.reflect.Method;public class Test {
       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());
     }
      }
      

  2.   

    这个还用不到反射Thread current = Thread.currentThread(); // 当前线程
    StackTraceElement[] elems = current.getStackTrace(); // 调用的堆栈信息
    StackTraceElement 里面大把函数供你玩:
      String  getClassName() 
      String  getFileName() 
      int  getLineNumber() 
      String  getMethodName() 
      

  3.   


    不知道我2楼的代码,楼主看懂了么?System.out.println(elems[0].getClassName() + "." + elems[0].getMethodName());
      

  4.   

    这么输出吧: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");
    }
    }
    }
      

  5.   

    你这样看看:
    class Foo{
    public void testFun(){
    System.out.println("aaa:"+this.getClass().getMethods()[0]);
    }
    public static void main(String[] args) {
    new Foo().testFun();
    }
    }
      

  6.   

    [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());        }
    }
    }
      

  7.   


    Thread current = Thread.currentThread();
    StackTraceElement[] elements = current.getStackTrace();
    System.out.println(elements[1].getMethodName());
      

  8.   


     Thread current = Thread.currentThread();
     StackTraceElement[] elements = current.getStackTrace();
     Class clazz = this.getClass();
     System.out.println(clazz.getName()+"."+elements[1].getMethodName());
      

  9.   

    呵呵,不好意思,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]