Thread.class.getName()的疑问

zdd2389 2013-10-30 08:09:59

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()))这句代码是什么意思?很疑惑,求解。先谢了
...全文
194 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
失落夏天 2013-10-31
  • 打赏
  • 举报
回复
引用 5 楼 zdd2389 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 解释写在代码中了

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

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{
	
	
}
这就是说Thread.class.getName()的返回值就是java.lang.Thread??还有就是也许一句一句的拆开看能看的懂,但是这个函数的逻辑理解不了。这个函数的功能应该是获取某个打log的函数的名字,但是它的内部实现中为什么如果碰到线程continue,碰到本类continue,获得的就是打log的函数名字???额,还有一点就是用.class可以获得这个类的class对象,这个是怎么实现的,反射?
ITJava 2013-10-30
  • 打赏
  • 举报
回复
JVM在运行时被加载的类都会在方法区有一个Class对象,用来保存类的基本信息,如:属性声明、方法名等;Thread.class得到的就是Thread的Class对象,故可以调用getName方法了;this.getClass().getName()意思是获取当前对象的类的Class的全限定名称(包含包名),st.getClassName()也是获取类的名称,if (st.getClassName().equals(this.getClass().getName()))就是判断两个对象是否是同一个类
xiaolong806124 2013-10-30
  • 打赏
  • 举报
回复
1.class是java的常用字段,*.class就返回*的Class实例;2,有了上面这个实例就可以Class中getname的方法;3,getname返回类的string表示,所以它就是个字符串比较。
失落夏天 2013-10-30
  • 打赏
  • 举报
回复
getclassname()字符串 返回包含当前堆栈跟踪元素表示的执行点的类的完全限定名称。 就是获取st的类名吧,, this.getClass().getName() 获取当前类的类名。。 判断是否值是否相等
失落夏天 2013-10-30
  • 打赏
  • 举报
回复
解释写在代码中了

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{
	
	
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧