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[]