首页 > 代码库 > Class的getName、getSimpleName与getCanonicalName的区别
Class的getName、getSimpleName与getCanonicalName的区别
一、getName 除了数组外,其他的类都是输出类全名
以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
1、此类对象表示的是非数组类型的引用类型,
返回该类的二进制名称,Java Language Specification, Second Edition 对此作了详细说明。
2、此类对象表示一个基本类型或 void
返回的名字是一个与该基本类型或 void 所对应的 Java 语言关键字相同的 String。
3、此类对象表示一个数组类
名字的内部形式为:表示该数组嵌套深度的一个或多个 ‘[‘ 字符加元素类型名。元素类型名的编码如下:
Element Type | Encoding |
---|---|
boolean | Z |
byte | B |
char | C |
class or interface | Lclassname; |
double | D |
float | F |
int | I |
long | J |
short | S |
例如:
System.out.println(String.class.getName()); System.out.println(DataBase.class.getName()); System.out.println((new DataBase[3][1]).getClass().getName()); System.out.println((new int[3][4][5][6][7][8][9]).getClass().getName());
java.lang.String
cn.database.DataBase
[[Lcn.database.DataBase;
[[[[[[[I
二、getSimpleName 输出类的简单名(不包含包名)
返回源代码中给出的底层类的简称。如果底层类是匿名的则返回一个空字符串。
数组的简称即附带 "[]" 的组件类型的简称。特别地,组件类型为匿名的数组的简称是 "[]"。
System.out.println(String.class.getSimpleName()); System.out.println(DataBase.class.getSimpleName()); System.out.println((new DataBase[3][1]).getClass().getSimpleName()); System.out.println((new int[3][4][5][6][7][8][9]).getClass().getSimpleName());
String
DataBase
DataBase[][]
int[][][][][][][]
三、getCanonicalName 输出类全名
返回 Java Language Specification 中所定义的底层类的规范化名称。如果底层类没有规范化名称(即如果底层类是一个组件类型没有规范化名称的本地类、匿名类或数组),则返回 null。
System.out.println(String.class.getCanonicalName()); System.out.println(DataBase.class.getCanonicalName()); System.out.println((new DataBase[3][1]).getClass().getCanonicalName()); System.out.println((new int[3][4][5][6][7][8][9]).getClass().getCanonicalName());
java.lang.String
cn.database.DataBase
cn.database.DataBase[][]
int[][][][][][][]
Class的getName、getSimpleName与getCanonicalName的区别