【JAVA进阶系列】进阶知识 -- Class类 getName()、getCanonicalName()、getSimpleName()、getTypeName()

【JAVA进阶系列】进阶知识 --Class类 getName()、getCanonicalName()、getSimpleName()、getTypeName() 方法的异同

【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
    } ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/28c3f979e67f4abab03bc2ab850b2837.png#pic_center)
}

参考致谢

本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。

【1】Class类 getName()、getCanonicalName()、getSimpleName()、getTypeName() 方法的异同

你可能感兴趣的:(面试,学习路线,阿里巴巴,java,开发语言)