反射类的学习

       今天学习了反射的使用,JVM通过类加载器,将编译后的字节码文件解析成四个部分:Class(类)、Field(属性)、Constructor(构造器)、Method(方法)。

       反射就是通过字节码文件创建对象,并操作对象的方法。

package com.meiran;
import com.meiran.domain.Student;
import org.junit.Test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {
    /**
     * 获取Class对象的三种方法
     */
    @Test
    public void testClass() throws Exception {
        //1
        Class clazz1 = Student.class;
        //2、通过对象实例
        Student s = new Student();
        Class clazz2 = s.getClass();
        //3、通过forName---框架中最常用的方法
        Class clazz3 = Class.forName("com.meiran.domain.Student");

        //new实例-无参的构架方法
        Student student = (Student) clazz3.newInstance();

        //new实例-有参数的构造方法
        Constructor constructor = clazz3.getConstructor(Integer.class, String.class);
        Student student2 = (Student) constructor.newInstance(50, "test");
        System.out.println(student2);
    }


    @Test
    public void test() {
        try {
            //获取Class对象
            Class clazz = Class.forName("com.meiran.domain.Student");
            //new对象
            Student s = (Student) clazz.newInstance();
            //获取属性对象
            Field field = clazz.getDeclaredField("id");
            field.setAccessible(true);//设置访问权限,可以访问private

            //设置属性值
            field.set(s, 584);
            System.out.println(field.get(s));

            //获取方法对象
            Method getNameMethod = clazz.getDeclaredMethod("setName", String.class);
            //操作方法
            getNameMethod.invoke(s, "bbb");//调用这个方法

            Field field2 = clazz.getDeclaredField("name");
            field2.setAccessible(true);
            System.out.println(field2.get(s));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值