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

来源:互联网 发布:mfp126a 有网络口吗 编辑:程序博客网 时间:2024/06/11 03:26

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: voidboolean.class.getName()//output: boolean

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

Element Type Encoding boolean Z byte B char C class 或 interface LclassName; double D float f int I long J short S

如:

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

Class.forName()

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

Class.forName("[[Ljava.lang.Object;")