private String getFunctionName()
    {
        StackTraceElement[] sts = Thread.currentThread().getStackTrace();
        if (sts == null)
        {
            return null;
        }
        for (StackTraceElement st : sts)
        {
            if (st.isNativeMethod())
            {
                continue;
            }
            if (st.getClassName().equals(Thread.class.getName()))
            {
                continue;
            }
            if (st.getClassName().equals(this.getClass().getName()))
            {
                continue;
            }
            tag = st.getClassName();
            return "[ "+ st.getFileName() + ":" + st.getLineNumber() + " "
                    + st.getMethodName() + " ]";
        }
        return null;
    }
代码中的Thread.class.getName()看不懂,1、.class是代表什么意思?查官方文档都没有看到这个属性。2、getName()明明是非静态函数,为什么没有实例化也可以直接调用?3、顺便帮我解释一下if (st.getClassName().equals(this.getClass().getName()))这句代码是什么意思?很疑惑,求解。先谢了java class 基础 非静态java基础非静态class

解决方案 »

  1.   

    解释写在代码中了public class Test {
    public static void main(String[] args) {
    //第一个,class就是代表这个类,比如本例中就代表B这个类而已。
    Class<B> b= B.class;
    //所以调用的是class类中的方法getName(),注意b是class这个类的类对象,而不是B的对象。
    String name = b.getName();
    }}
    class B{


    }
      

  2.   

    getclassname()字符串
    返回包含当前堆栈跟踪元素表示的执行点的类的完全限定名称。就是获取st的类名吧,,
    this.getClass().getName()
    获取当前类的类名。。判断是否值是否相等
      

  3.   

    1.class是java的常用字段,*.class就返回*的Class实例;2,有了上面这个实例就可以Class中getname的方法;3,getname返回类的string表示,所以它就是个字符串比较。
      

  4.   

    JVM在运行时被加载的类都会在方法区有一个Class对象,用来保存类的基本信息,如:属性声明、方法名等;Thread.class得到的就是Thread的Class对象,故可以调用getName方法了;this.getClass().getName()意思是获取当前对象的类的Class的全限定名称(包含包名),st.getClassName()也是获取类的名称,if (st.getClassName().equals(this.getClass().getName()))就是判断两个对象是否是同一个类
      

  5.   

    这就是说Thread.class.getName()的返回值就是java.lang.Thread??还有就是也许一句一句的拆开看能看的懂,但是这个函数的逻辑理解不了。这个函数的功能应该是获取某个打log的函数的名字,但是它的内部实现中为什么如果碰到线程continue,碰到本类continue,获得的就是打log的函数名字???额,还有一点就是用.class可以获得这个类的class对象,这个是怎么实现的,反射?
      

  6.   

    这就是说Thread.class.getName()的返回值就是java.lang.Thread??还有就是也许一句一句的拆开看能看的懂,但是这个函数的逻辑理解不了。这个函数的功能应该是获取某个打log的函数的名字,但是它的内部实现中为什么如果碰到线程continue,碰到本类continue,获得的就是打log的函数名字???额,还有一点就是用.class可以获得这个类的class对象,这个是怎么实现的,反射?
    貌似这几句只是本类的是Thead类的名字不用输出而已。。
    log是很多信息吧,sts一步一步的都记录下来,我想只是这两个条件下不用输出吧?
    至于你的第二个问题,我怕我说不清楚,你看这里吧。
    http://blog.csdn.net/llhhyy1989/article/details/7244123