关于Java反射(一)

说起反射大家应该都不陌生,在我们使用的各种框架中大量的运用了反射技术,反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法.简单的理解为就是将类的各个部分封装为其他对象,这就是反射机制,优点是,可以解耦,提高程序拓展性,让程序更加灵活,可以在程序运行过程中操作这些对象,缺点是反射的效率是非常慢的.
 在这里插入图片描述
 首先我们先说一说类的加载机制,在java中类的加载是通过类加载器加载的,类加载器的作用就是把class文件装入到内存中,然后生成一个代表这个类java.lang.Class对象,在加载完毕之后还会有一个链接和初始化的过程.一个加载的类在JVM中只有一个Class对象,一个类被加载后,类的整个结构都会被封装在class对象中,包含了完整的类的结构信息,我们就可以通过Class获取一个类中所有被加载的结构.
 Class类是java反射的源头,Class本身也是一个类,一个Class对象对应一个.class文件,所以我们在使用反射的时候要先获取Class对象,那些类型具有Class对象呢?接口,数组,枚举,注解,void,包装类(Interger…)和class(内部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类)
,下面就给大家介绍获取class对象的方法

1.最安全可靠,性能最好的就是直接通过类的class属性获取

Class clazz = Cat.class;

2.通过实例的getClass()获取Class对象

Cat cat = new Cat();
Class clazz = cat.getClass();

3.通过全类名的方式获取,需要抛出ClassNotFoundException

Class clazz = Class.forName("com.easy.reflect.Demo.Cat");

4.包装类可以直接通过.Type获得类的实例

Integer.Type;

5.我们也可以通过子类获得父类的实例对象

cat.getSuperCalss();

常用方法

//获取包名+类名
cat.getName()
//获得类名
cat.getSimpleName();

//获得类的public属性
cat.getFields();
//加了Declared就可以获得所有的属性
cat.getDeclaredFields();
//获得本类及其父类的全部public方法
Method[] methods = cat.getMethods();

 //获得指定方法
 //重载
 //空参函数
 Method getNames = cat.getMethod("getName", null);
 //参数为String名为setName的方法
 Method setName = cat.getMethod("setName", String.class);
//获得指定的构造器
  constructors=cat.getDeclaredConstructor();
//通过反射获得注解
Annotation[] annotations = cat.getAnnotations();
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值