阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第21章:认识反射机制:课时100:Class类对象的三种实例化模式

反射之中所有的核心操作都是通过Class类对象展开的,可以说Class类是反射操作的根源所在,但是这个类如果要想获取它的实例化对象,可以采用三种方式完成,首先来观察java.lang.Class类的定义:

public final class Class<T>
extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement

从JDK1.5开始Class类在定义的时候可以使用泛型进行标记,这样的用法主要是希望可以避免所谓的向下转型。下面通过具体的操作讲解三种实例化形式。
1、【Object类支持】Object类可以根据实例化对象获取Class对象:
public final Class<?> getClass​();
这种方式有一个不是缺点的缺点:如果现在只是想获得Class类对象,则必须产生指定类对象后才可以获得;

package cn.mldn.demo;
class Person {} // 采用自定义的程序类
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	Person per = new Person(); // 已经存在有指定类的实例化对象
    	Class<? extends Person> cls = per.getClass();
    	System.out.println(cls.getName()); // 获取的是类的完整名称
    }
}

2、【JVM直接支持】采用“类.class”的形式实例化
特点:如果要采用此种模式,则必须导入程序所对应的开发包;

package cn.mldn.demo;
class Person {} // 采用自定义的程序类
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	Class<? extends Person> cls = Person.class;
    	System.out.println(cls.getName()); // 获取的是类的完整名称
    }
}

3、【Class类支持】在Class类里面提供有一个static方法:
加载类:public static Class<?> forName​(String className) throws ClassNotFoundException;

package cn.mldn.vo;
public class Person {
}

package cn.mldn.demo;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	Class<?> cls = Class.forName("cn.mldn.vo.Person");
    	System.out.println(cls.getName()); // 获取的是类的完整名称
    }
}

这种模式最大的特点是可以直接采用字符串的形式定义要使用的类型,并且程序中不需要编写任何的import语句。如果此时要使用的程序类不存在则会抛出“java.lang.ClassNotFoundException”异常。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值