11.17java反射机制

一:反射概念

Java的反射机制是指在运行状态中,对于任意一个类,动态获取信息以及动态调用对象方法的功能。记住一句话“万物皆可对象”。

二:实现的功能

通过java反射,可以实现

1:在运行的时候判断任意对象所属的类;

2:在运行的时候构造任意类的对象;

3:在运行的时候判断任意类的方法和属性;

4:在运行的时候调用任意对象的方法

三:获取的方法

它有三种获得class对象的方法

//方法一
//使用Class的静态方法forName().
Class c=Class.forName("类所在的包+类名");
//方法二
//调用对象的getClass方法
//new一个要创建类的对象
Student student=new Student();
Class c=student.getClass();
//方法三
//调用类的class属性
Class<Student> c=Student.Class;

四:常用的类

java的反射核心类是Class类,Field类是表示类的属性,它可以获取或者设置类的属性的值,

Method类是表示类的方法,它可以获取类中方法的信息或者执行那个方法。

Constructor类表示类的构造方法。

五:创建对象的方法

反射有两种创建对象的方法:

一种是使用Class对象的newInstance()方法来创建对象

另一种是使用Constructor对象创建对象。

两者区别在于:

第一种是要求该Class对象的对应类中有默认的构造方法。实际上他是利用默认构造方法来创建该类的实例。

第二种是先使用Class对象获取指定的Constructor对象,然后再调用Constructor对象的newInstance()方法来创建该Class对象对应的实例。通过该方法可以使用某个类指定的构造方法来创建实例。

 //获取Person的 无参构造方法 的对象
            Constructor constructor = c.getConstructor();
            System.out.println(constructor.getName());
            //获取带参的构造方法的对象
            System.out.println("带参的" );
            Constructor constructor1 = c.getConstructor(new Class[]{String.class, Integer.class, String.class});
            System.out.println(constructor1.getName());
            //根据构造方法对象来完成类对象的实例化
            Object o = constructor.newInstance();//等价于Object obj=new Person();
            System.out.println(o);

六:访问类的属性

反射中使用Field对象来获取对象的属性。

需要注意的是获得的属性分仅获得公开的(public)属性和全部的属性,可以用不同的方法来获取。

七:访问类的方法

使用Method对象可以调用对象的的方法,在Method类中包含一个invoke()方法,代码如下:

Method showMsg = c.getMethod("showMsg");
            showMsg.invoke(o1,null);
            showMsg.invoke(o,null);
            Method getName = c.getMethod("getName");
            Object invoke = getName.invoke(o1, null);
            Method setName = c.getMethod("setName");
            System.out.println(invoke);

八:注意点

虽然反射大大的提高了代码的灵活性,但是不能滥用,因为使用反射创建对象的时候,性能会稍微降低一些。只有需要动态创建某个类的对象时才会使用,通常在开发通用性比较广的框架,基础平台的时候会大量使用。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值