java反射系列01 getName()的实现

xiaoxiao2021-02-28  85

getName代码实现

Java Class类中关于getName()的相关方法和成员变量如下

private transient String name; private native String getName0(); public String getName(){ String name = this.name; if(name == null) this.name = name = getName0(); return name;

可以看到 getName()方法在此使用了小小的懒汉式单例模式,并且在内部是调用了本地方法getName0()

getName()文档介绍

以字符串的形式返回此Class对象代表的(class, interface, array class, primitive, void)。

如果此class对象表示的引用类型不是一个数组类型,则返回此class表示的binary name,如:

Object.class.getName(); //output: java.lang.Object

如果此class对象带表一个primitive类型或void,则以字符串的形式返回相应的java关键字, 如:

void.class.getName() //output: void boolean.class.getName() //output: boolean

如果此类表示的是数组 ‘[‘的数量代表了数组的维度 Element Type被编码成以下格式:

Element TypeEncodingbooleanZbyteBcharCclass 或 interfaceLclassName;doubleDfloatfintIlongJshortS

如:

Object[][].class.getName(); //output: [[Ljava.lang.Object int[][].class.getName(); //output: [[I

Class.forName()

另外Class.forName(clz.getName())可以获取相应数组的类实例, 如:

Class.forName("[[Ljava.lang.Object;")
转载请注明原文地址: https://www.6miu.com/read-46197.html

最新回复(0)