Java的getCanonicalName和getName
<div class="article-info-box">
<div class="article-bar-top d-flex">
<span class="time">2017年05月03日 11:50:45</span>
<div class="float-right">
<span class="read-count">阅读数:2312</span>
</div>
</div>
</div>
<article>
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-62cd27f8b9.css">
<div class="htmledit_views">
Java中获取类名主要有三个方法供我们使用:getName(), getCanonicalName() 和getSimpleName().
举个例子看下它们的区别。比如如下类:
-
package my;
-
-
public
class ExternalClassConfig {
-
-
private String desc;
-
-
// ...
-
-
public
static
class InternalConfig {
-
// ...
-
}
-
-
-
}
类里面含有个内部类。
然后我们调用类的上面三个方法看下结果:
-
@Test
-
public void testclassName() {
-
System.out.println();
-
System.out.println(
"方法 值");
-
System.out.println(
"getName " + ExternalClassConfig.class.getName());
-
System.out.println(
"getCanonicalName " + ExternalClassConfig.class.getCanonicalName());
-
System.out.println(
"getSimpleName " + ExternalClassConfig.class.getSimpleName());
-
-
System.out.println(
"getName " + InternalConfig.class.getName());
-
System.out.println(
"getCanonicalName " +InternalConfig.class.getCanonicalName());
-
System.out.println(
"getSimpleName " + InternalConfig.class.getSimpleName());
-
-
System.out.println();
-
}
输出结果如下:
方法 值 getName my.ExternalClassConfig getCanonicalName my.ExternalClassConfig getSimpleName ExternalClassConfig getName my.ExternalClassConfig$InternalConfig getCanonicalName my.ExternalClassConfig.InternalConfig getSimpleName InternalConfig
这里,getName()返回的是虚拟机里面的class的表示,而getCanonicalName()返回的是更容易理解的表示。其实对于大部分class来说这两个方法没有什么不同的。但是对于array或内部类来说是有区别的。
另外,类加载(虚拟机加载)的时候需要类的名字是getName。
再看数组:
-
@Test
-
public void testclassName4Array() {
-
String [] ss =
new String[]{
-
"zw",
"zz"
-
};
-
System.out.println();
-
System.out.println(
"方法 值");
-
System.out.println(
"getName " + ss.getClass().getName());
-
System.out.println(
"getCanonicalName " + ss.getClass().getCanonicalName());
-
System.out.println(
"getSimpleName " + ss.getClass().getSimpleName());
-
-
System.out.println();
-
}
输出结果:
不习惯这种表示可能觉得有点怪。首先 ‘[’ 表示数组,一个代表一维数组,比如 ‘[[’ 代表二维数组。之后 ‘L’ 代表类描述符,最后分号表示结束。
方法 值 getName [Ljava.lang.String; getCanonicalName java.lang.String[] getSimpleName String[]