Java Class中规范名称,简单名称和类名之间有什么区别?

问题:

在Java中有什么区别:

Object o1= ....
o1.getClass().getSimpleName();
o1.getClass().getName();
o1.getClass().getCanonicalName();

UPDATE

我已经检查了Javadoc多次,但这从来没有解释得很好。
我也进行了测试,并没有反映出这些方法被称之为背后的真正意义。
所以请,而不是责怪我提出这个问题,并指示我到javadoc,尽量做一些努力来解释他们背后的真正意义。感谢您的支持。

回答:

如果您不确定某事,请尝试首先撰写测试。
我这样做:
class=”lang-java prettyprint-override”>

//primitive
System.out.println(int.class.getName());
System.out.println(int.class.getCanonicalName());
System.out.println(int.class.getSimpleName());

System.out.println();

//class
System.out.println(String.class.getName());
System.out.println(String.class.getCanonicalName());
System.out.println(String.class.getSimpleName());

System.out.println();

//inner class
System.out.println(HashMap.SimpleEntry.class.getName());
System.out.println(HashMap.SimpleEntry.class.getCanonicalName());
System.out.println(HashMap.SimpleEntry.class.getSimpleName());        

System.out.println();

//anonymous inner class
System.out.println(new Serializable(){}.getClass().getName());
System.out.println(new Serializable(){}.getClass().getCanonicalName());
System.out.println(new Serializable(){}.getClass().getSimpleName());

打印:

int
int
int

java.lang.String
java.lang.String
String

java.util.AbstractMap$SimpleEntry
java.util.AbstractMap.SimpleEntry
SimpleEntry

ClassnameTest$1
null

在最后一个块中有一个空行,getSimpleName返回一个空字符串。
结果是:

  • 名称是用于动态加载类的名称,例如使用默认ClassLoader调用Class.forName
  • 规范名称是在import语句中使用的唯一标识该类的名称。在toString或日志记录操作期间可能会有用。
  • 简单的名字松散地标识该类,在toString或日志记录操作中可能会有用,但不能保证是唯一的。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between canonical name, simple name and class name in Java Class?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 1 = 1