请写出一个静态方法public static String getMyClassName(),使它满足:将这个方法放在任何一个类里面,它都能返回所在类的类名称。
比如把它放在类Narnia里面,这个方法就返回字符串“Narnia”;放在类Minerva里面,就返回字符串“Minerva”.

解决方案 »

  1.   

    StackTraceElement[] ste = new Throwable().getStackTrace();
    return ste[0].getClassName();
      

  2.   


    public static String getMyClassName(){
         
    return new Throwable().getStackTrace()[1].getClassName();   

    }
      

  3.   

    使用反射分析类的能力
    Class  cl =Class.forName(name);
    String r = cl.getName();
      

  4.   

    用securityManger的getClassContext()也可以或许当前运行栈的信息。
    我觉得讨论 这么做的意义 比如何实现 有用。
      

  5.   


    private static String getClassName(){
       return new Throwable().getStackTrace()[0].getClassName();
    }
      

  6.   

    印象中n久以前csdn java版出现过类似的问题,跟前辈学的。
      

  7.   

    google java static 获取类名
    直接解决
      

  8.   

    原理也很简单,平时java程序出exception,调试时一般打印stackTrace。里面包含了class,method等信息。
    这里new Throwable()你用new Exception()也是一样。
    自己看下就知道,里面很多get方法,能拿不少东东
      

  9.   

    如果是SUN JDK的话,还有一种写法:
    sun.reflect.Reflection.getCallerClass(1).getName();
    另外有一种和上面差不多的写法,
    Thread.currentThread().getStackTrace()[1].getClassName();

      

  10.   

    学习了。。
    我想过this.class.getClassName(),一看是static方法,嗯。
      

  11.   

    不对,是 (ClassName).class.getClassName(),这样也可行
      

  12.   

     呵呵 我也第一反应想这个  后来想半天才想起来要 static的  
    这个是什么原理呢 
      

  13.   


    StackTraceElement[] ste = new Throwable().getStackTrace();
    return ste[0].getClassName();
    如果是SUN JDK的话,还有一种写法:
    sun.reflect.Reflection.getCallerClass(1).getName();
    另外有一种和上面差不多的写法,
    Thread.currentThread().getStackTrace()[1].getClassName();这些都是可行的
      

  14.   


    这个方法可以,不过我觉得这个问题本来就有问题,实现这种功能不应该用static方法来实现,如果不用static方法实现的话就好搞多了,而且放在基类里面继承下去,每个类就都有这个功能了。
      

  15.   

    17楼说的在理,领教了 。
    使用反射分析类的能力
    Class cl =Class.forName(name);
    String r = cl.getName();
    这个好像有些印象,应该没什么问题。