跟王老师学反射:反射概述

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟王老师学反射:反射概述相关的知识,希望对你有一定的参考价值。

跟王老师学反射(一) java反射概述

主讲教师:王少华   QQ群号:483773664

学习目标:

  1. 理解Java反射机制

一、什么是Java反射

现实生活,我们会看到这样的现象,在很多影视城,会看到很多山寨版的古代的建筑,比如故宫,但是由于年代久远,故宫的建筑图纸,丢失了(我们假设故宫的图纸丢失了),这样我们就必须依据现在的故宫实体建筑,画出它的图纸,然后依据现画好来的图纸,来建造山寨版的故宫。这样一个由实物得到图纸的过程,我们也可以称之为“反射过程”

Reflection(反射)允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。反射相关的API有:

java.lang.Class:代表一个类

java.lang.reflect.Method:代表类的方法

java.lang.reflect.Field:代表类的成员变量

java.lang.reflect.Constructor:代表类的构造方法

。。。


其实,在我们平时的开放过程中,已经应该到了Java反射机制,比如,在MyEclipse中,我们创建一个对象,然后通过点,编译工具就会将这个对象的全部属性显示出来

技术分享

这就是利用了Java反射机制。

二、、小案例:见识反射的魅力

1、普通类:Floor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Floor {
    private String color;   //大楼颜色
    int height;             //大楼高度
    /**
     * 构造方法
     */
    public  Floor() {
        System.out.println("我是Floor的构造方法");
    }
    /**
     * 获得color
     */
    public void getColor(){
        System.out.println(this.color);
    }
    /**
     * 大楼的功能
     * @param str
     */
    public void fun(String str){
        System.out.println(str);
    }
}

2、测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void reflectMethod(Floor floor) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException{
        //获得图纸:getClass
        Class<Floor> floorClass = (Class<Floor>) floor.getClass();
        //造楼:newInstance
        Floor newFloor = floorClass.newInstance();
        //属性赋值: 获得属性
        Field field = floorClass.getDeclaredField("color");       
         
        //属性赋值:因为color的属性是private,所以得设置其可访问性
        field.setAccessible(true);

        field.set(newFloor, "白色");

       //查看是否设置成功
        newFloor.getColor();


         
        //获得方法:通过方法名和方法参数类型来区分
        Method method = floorClass.getDeclaredMethod("fun", String.class);
        //执行方法:
        method.invoke(newFloor, "教学楼");
         
    }

技术分享









以上是关于跟王老师学反射:反射概述的主要内容,如果未能解决你的问题,请参考以下文章

跟王老师学反射:使用反射调用方法

跟王老师学反射:使用反射操作数组

跟王老师学反射:使用反射生成并操作对象

跟王老师学反射:反射应用小案例--进行对象拷贝

跟王老师学反射:动态代理

跟王老师学反射:Class类:获得Class对象