JAVA反射(二)

在之前有写了关于JAVA反射的理解以及几种用法,今天主要想记一下常用一些功能以及一些注意的地方,为了使功能尽量全面,我们以一个包含比较丰富的实体类为例:
首先是新建一个自定义的注解、以及接口:
在这里插入图片描述
在这里插入图片描述
接下来新建一个Creature类:
在这里插入图片描述
接下来新建一个Person类,继承自Creature类,实现上面的自定义接口和一个自带的Comparable接口,以及引用自定义注解:
在这里插入图片描述
其中Person类属性有姓名name以及年龄age,分别用不同的访问修饰符:
在这里插入图片描述
有参无参构造器使用不同的访问修饰符:
在这里插入图片描述
setName方法传入多个变量并有输出语句:
在这里插入图片描述
声明一个无返回值和参数的eat()方法:
在这里插入图片描述
声明一个带自定义注解并且返回值为String的sleep()方法,并且抛出运行时异常:
在这里插入图片描述
再声明两个内部类Computer以及Mobile:
在这里插入图片描述
以及重写tostring方法等等,就不一一展示了。
首先来看在运行时创建一个类的实例,首先是创建Class实例,上一次已经说过:

Class<Person> clazz=Person.class;

使用一个带Person泛型的Class类接收,再调用该对象的.newInstance()方法创建一个Person实例:

		Person person=clazz.newInstance();
        System.out.println(person);

运行结果:
在这里插入图片描述
同样我们也可以使用forName()加载全类名创建一个Class实例:

  	    Class<Person> clazz2= (Class<Person>) Class.forName("com.lya.Reflection.Person");
        Person person=clazz2.newInstance();
        System.out.println(person);

从结果我们不难看出,newInstance()方法默认调用无参构造器。

接下来看在运行时获取类的构造器,注意在上面我们声明Person构造器时,两个有参与无参的构造器访问修饰符不同。
首先同样是获取Class实例:

Class clazz=Person.class;

接下来使用reflect包中的Constructor类,声明一个该类型的数组,调用class实例的getConstructors()方法对所有构造器进行获取:

 Constructor[] cons=clazz.getConstructors();
        for (int i = 0; i <cons.length ; i++) {
   
            System.out.println(cons[i]);
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值