反射学习笔记

反射原理

得到一个对象不通过New的方式创建


1.首先需要把Java文件保存到本地硬盘.Java

2.编译Java文件,成.class文件

3.使用JVM,把class文件通过类加载加载带内存中

4.万事万物皆对象,class文件在内存中用Class内表示

5.当使用反射时,首先要获取内存中的Class类,得到这个类之后,就可以得到class文件里面的所有内容(包括属性、构造方法、普通方法)

属性可以通过一个类来表示        Filed    

普通方法可以通过一个类来表示        Constructor

构造方法可以通过一个类来表示        Method


反射使用

如果得到Class类,可以得到这个类中的所有内容  属性,普通方法,构造方法

得到Class类的三种方式:

(1)类名.class

(2)对象.getClass

(3)使用Class.forName(“类路径”)


一、使用反射得到一个对象。

1.建一个Person类

public class Person{
    private String name;
    private int id;

    public Person(String name, int id) {
        this.name = name;
        this.id = id;
    }

    public String getName() {

        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Person() {
    }
}

2.写Test

(1)使用反射操作无参构造方法

/*使用反射操作无参构造方法*/
@Test
public void Test1() throws Exception{

    /*得到Class*/
    Class c3 = Class.forName("Pojo.Person");

    /*获取实例*/
    Person p = (Person)c3.newInstance();

    p.setName("张三");

    System.out.println(p.getName());
}

(2)使用反射操作有参构造方法

    /*使用反射操作有参数的构造方法*/
    @Test
    public void Test2() throws Exception{

        /*得到Class*/
        Class c = Class.forName("Pojo.Person");

        /*获取有参构造器
          参数里面传入方法里面的参数类型,使用的是class传递*/
        Constructor cs = c.getConstructor(String.class,int.class);

        /*通过有参的构造器得到对象,并且传入参数*/
        Person p = (Person)cs.newInstance("lisi",18);
        System.out.println(p);
    }
}

二、使用反射操作类里面的属性

@Test
public void Test3() throws Exception{

    /*得到Class*/
    Class c = Class.forName("Pojo.Person");

    /*通过Class创建对象*/
    Person p = (Person)c.newInstance();

    /*得到一种属性,参数是属性的名称*/
    Field f = c.getDeclaredField("id");
    /*表示得到所有属性*/
    c.getDeclaredFields();

    /*设置可以操作私有属性
      因为不让直接操作私有属性*/
    f.setAccessible(true);

    /*第一个参数为对象,第二个参数为值
      属性调用方法来给对象中的该属性赋值*/
    f.set(p,18);

    /*通过属性调用对象,来得到对象的属性*/
    System.out.println(f.get(p));
}

三、操作普通方法

@Test
/*操作普通方法*/
public void Test4() throws Exception{

    /*得到Class*/
    Class c = Class.forName("Pojo.Person");

    /*通过Class创建对象*/
    Person p = (Person)c.newInstance();

    /*得到普通方法,第一个参数为需要得到的方法名,第二个为方法参数的类型*/
    Method method = c.getDeclaredMethod("setName", String.class);
    /*得到所有方法*/
    Method[] method1 = c.getDeclaredMethods();

    /*调用方法,第一个参数为对象,第二个参数为需设置的值*/
    method.invoke(p,"zhangsan");

    System.out.println(p.getName());
}

四、当操作的是一个静态方法的时候,因为静态方法调用的方式是  类名.方法名 不需要实例。所以使用反射操作静态方法的时候也是不需要实例的。

method.invoke(null,"lala");






# 高校智慧校园解决方案摘要 智慧校园解决方案是针对高校信息化建设的核心工程,旨在通过物联网技术实现数字化校园的智能化升级。该方案通过融合计算机技术、网络通信技术、数据库技术和IC卡识别技术,初步实现了校园一卡通系统,进而通过人脸识别技术实现了更精准的校园安全管理、生活管理、教务管理和资源管理。 方案包括多个管理系统:智慧校园管理平台、一卡通卡务管理系统、一卡通人脸库管理平台、智能人脸识别消费管理系统、疫情防控管理系统、人脸识别无感识别管理系统、会议签到管理系统、人脸识别通道管理系统和图书馆对接管理系统。这些系统共同构成了智慧校园的信息化基础,通过统一数据库和操作平台,实现了数据共享和信息一致性。 智能人脸识别消费管理系统通过人脸识别终端,在无需接触的情况下快速完成消费支付过程,提升了校园服务效率。疫情防控管理系统利用热成像测温技术、视频智能分析等手段,实现了对校园人员体温监测和疫情信息实时上报,提高了校园公共卫生事件的预防和控制能力。 会议签到管理系统和人脸识别通道管理系统均基于人脸识别技术,实现了会议的快速签到和图书馆等场所的高效通行管理。与图书馆对接管理系统实现了一卡通系统与图书馆管理系统的无缝集成,提升了图书借阅的便捷性。 总体而言,该智慧校园解决方案通过集成的信息化管理系统,提升了校园管理的智能化水平,优化了校园生活体验,增强了校园安全,并提高了教学和科研的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值