反射的复习

package com.etime1012.test;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * @Author zp
 * @Date 2022/10/12 6:16 PM
 * @Description: TODO
 */

public class Test {
    public static void main(String[] args) {

        try {

            /**
             * 三种获取class对象的方法
             */
            Student student = new Student();
            Class<? extends Student> aClass = student.getClass();
            Class<?> aClass1 = Class.forName("com.etime1012.test.Student");
            Class<Student> aClass2 = Student.class;
//            System.out.println(aClass==aClass1);
//            System.out.println(aClass==aClass2);

            /**
             * 两种方法使用反射获取类的实例
             */
            Student student1 = aClass.newInstance();
            Constructor<? extends Student> constructor = aClass.getConstructor();
            Student student2 = constructor.newInstance();

            //反射调用setName,getName方法
            Method setName = aClass.getMethod("setName", String.class);
            setName.invoke(student1,"zp");
            Method getName = aClass.getMethod("getName");
//            System.out.println(getName.invoke(student1));

            /**
             * 反射使用field来操作age属性
             */
            Field age = aClass.getDeclaredField("age");
            Method setAge = aClass.getMethod("setAge", int.class);
            setAge.invoke(student1,18);
            age.setAccessible(true);
//            System.out.println(age.get(student1));
//            //获取变量变量名字
//            System.out.println(age.getName());
//            //获取属性类型
//            System.out.println(age.getType());
//            //获取属性的修饰符
//            System.out.println(Modifier.toString(age.getModifiers()));

            /**
             * 使用get/set方法操作addr属性
             */

            Method setAddr = aClass.getMethod("setAddr", String.class);
            Method getAddr = aClass.getMethod("getAddr");
            //设置student1的地址
            setAddr.invoke(student1,"大温江");
            //获取student1的地址
            System.out.println(getAddr.invoke(student1));


        }catch (Exception e){
            System.out.println(e);
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值