【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
}
}