反射机制(获取类对象,修改类属性,访问方法)

本文详细介绍了Java反射机制的基本使用,包括获取类对象的三种方式、通过类对象创建对象、访问和修改属性、调用方法等。通过实例展示了如何利用反射动态调用类的方法和属性,以及其在实际开发中的应用场景,如在Servlet中根据参数调用不同业务处理方法。反射机制增强了代码的灵活性,便于实现动态编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

一、类对象的概念

二、获取类对象

三、使用类对象来创建对象

四、访问属性并修改属性

五、调用方法

六、反射机制的简单运用

 总结


前言

本篇文章将介绍反射机制的简单使用~

一、类对象的概念

类对象的概念:所有的类,都有类对象,类对象用来提供类本身的信息,比如有哪几种构造方法, 有多少属性,有哪些普通方法等。

二、获取类对象

获取类对象有3种方法:

前提:有一个类 例:Student类 ,写简单点。

public class Student {//实体类
    private String name;//设置为私有变量和ger方法,这样是一个标准的bean类,用于后续jsp使用EL技术自动调用get方法的
    public String getName() {
        return name;
    }

    public void setName(String name) {

        this.name = name;
    }
    @Override//此注解表示此方法是重新的父类方法
    public String toString() {//重写toString  方便后续测试用
        return name;
    }
}

(1)通过类名.Class来获取:

Class aclass = Student.class;

(2)通过实例化对象.getClass来获取:

Student st = new Student();
Class bclass = st.getClass();

(3)通过Class.forName("包名.类名");来获取:

Class cclass = Class.forName("包名.Student");//需要写在try里面

三、使用类对象来创建对象

代码如下(示例):

Student st = new Student();
Class aclass = st.getClass();//获取类对象
Constructor c = null;//创建构造器
Student st1 = null;//声明一个对象
try {
     c = a1.getConstructor();//获取构造器
    //通过构造器来实例化得到对象
    st1 = (Student) c.newInstance();//newInstance()返回为Object类型,需要强类型转化为原类型
}catch (Exception e){
   e.printStackTrace();
}

四、访问属性并修改属性

代码如下(示例):

Student st = new Student();
st.setName("洛云");
System.out.println(st);//打印出洛云
Class aclass = st.getClass();
Field fd = null;//我理解为一个装属性的容器
try {
    fd = aclass.getDeclaredField("name");//获取名字为username的属性字段,使用getFiled()方法也可以
    //修改对象中的该属性
    fd.set(st,"希儿");//第一个参数表示要修改的对象,第二个参数表示要将该对象在fd中的属性的属性值修改成的值。
    System.out.println(st);//打印出希儿
}catch (Exception e){
    e.printStackTrace();
}

(1)getFiled()方法与getDeclaredField()方法的区别:

        getFiled只能获取public访问权限的属性字段,包括从父类继承的。

        getDeclaredField能获得本类全部访问权限的属性字段,除了继承的。

五、调用方法

代码如下(示例):

Student st = new Student();
Class aclass = st.getClass();
System.out.println(st.getName());//打印null
try {
// 获取Method 类,相当于获取到所要调用的方法
Method method = aclass.getMethod("setName",String.class);//getMethod(name,类型.class):name参数为需要调用的方法名,后面的参数为:该方法中参数类型.class,如果有2个或多个参数,例如方法f(String int) 则该参数为String.class,int.class
//调用方法
method.invoke(st,"希儿");//调用st对象中的上述获取到的方法,后面给出所要传递的参数,有几个参数给几个参数。
System.out.println(st.getName());//打印希儿
}catch (Exception e){
    e.printStackTrace();
}

六、反射机制的简单运用

例:假设在一个Servlet里写了多个业务处理方法,如处理登录的login()方法,退出的exit()方法。当我们在前端页面点击登录或退出时,我们传递一个参数method【此method不是form标签的属性method】。点击登录,传递method="login";点击退出,传递method="exit";这样在Servlet类里面,我们获取到method参数,根据反射机制中的方法getMethod(method,...参数);就会调用不同的方法,处理不同的业务。

这样的好处:我们可以将同类型的业务处理放在同一个Servlet类里,根据触发不同的事件,传递不同的参数method,调用不同方法,处理不同的业务。

关于前端页面传递参数涉及到Servlet方面的知识,此文不做过多描述~感兴趣的同学可以自行搜索。

 总结

(1)一些基础简单的反射机制运用,有收获的同学请点个赞~

(2)因为是第一次发文,有任何不足或错误的地方,请友好提出~

(3)以上内容均为本人学习知识后,按照自己理解来一字一码编写的~

(4)关于反射机制肯定还有许许多多的方面,这里只是提到了一点点。

(5)看到这里,想必你也是为了提升自我努力吧~,一起加油吧~ ~( ̄▽ ̄~)(~ ̄▽ ̄)~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值