【1】getName()

返回该类对象作为字符串表示的实体(类、接口、数组类、基本数据类型或 void)的名称
可以理解为返回的是虚拟机中 Class 对象的表示
当动态加载类的时候,会用到该方法的返回值,如: 使用 Class.forName() 方法
如果是内部类,则使用 $ 符号进行连接
如果是数组,则使用 [ 来表示,数组是几维,[ 就有几个

【2】getCanonicalName()

返回 Java 语言规范定义的底层类的规范名称
如果是一个本地类或匿名类或其组件的数组类型没有规范名称的,则返回 null
可以理解为返回的是正常的包含路径的类名
该方法的返回值可以在 import 语句中使用
能唯一标识一个类,还可以在 toString() 或日志操作期间使用

【3】getSimpleName()

返回源代码中给出的基础类的简单名称,如果基础类是匿名的,则返回空字符串
可以理解为返回的是仅仅是类名,不包含路径
不能保证能唯一标识一个类,可以在 toString() 或日志操作期间使用

【4】getTypeName()

返回此类型名称的信息字符串
可以理解为返回的是该类类型的名称

【5】使用示例

public class AAA {
 
    class BBB {
    }
 
    public static void main(String[] args) {
        // 数组
        System.out.println(String[].class.getName()); // [Ljava.lang.String;
        System.out.println(String[].class.getCanonicalName()); // java.lang.String[]
        System.out.println(String[].class.getSimpleName()); // String[]
        System.out.println(String[].class.getTypeName()); // java.lang.String[]
 
        // 成员内部类
        System.out.println(BBB.class.getName()); // lang.reflect.AAA$BBB
        System.out.println(BBB.class.getCanonicalName()); // lang.reflect.AAA.BBB
        System.out.println(BBB.class.getSimpleName()); // BBB
        System.out.println(BBB.class.getTypeName()); // lang.reflect.AAA$BBB
 
        // 匿名内部类
        System.out.println(new Object(){}.getClass().getName()); // lang.reflect.AAA$1
        System.out.println(new Object(){}.getClass().getCanonicalName()); // null
        System.out.println(new Object(){}.getClass().getSimpleName()); // ""
        System.out.println(new Object(){}.getClass().getTypeName()); // lang.reflect.AAA$4
 
        // 普通类
        System.out.println(AAA.class.getName()); // lang.reflect.AAA
        System.out.println(AAA.class.getCanonicalName()); // lang.reflect.AAA
        System.out.println(AAA.class.getSimpleName()); // AAA
        System.out.println(AAA.class.getTypeName()); // lang.reflect.AAA
 
        // 基本数据类型
        System.out.println(int.class.getName()); // int
        System.out.println(int.class.getCanonicalName()); // int
        System.out.println(int.class.getSimpleName()); // int
        System.out.println(int.class.getTypeName()); // int
    }
}

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐