JavaWeb---反射

JavaWeb—反射

反射:框架设计的灵魂(将一个类的各个组成部分封装成对象,每个类的运行时的类型信息就是用Class对象表示的)
在这里插入图片描述
Class类对象是在内存中,描述所有字节码文件特征的类

源代码阶段:表示你的Java代码还在硬盘阶段,还没有进内存,Class类对象阶段和Runtime运行时阶段:都在内存中进行
在这里插入图片描述
在这里插入图片描述
例:
在这里插入图片描述
功能方法
在这里插入图片描述
在这里插入图片描述
例:

    public static void main(String[] args) throws Exception {
//        获取Person类的对象
        Class p = Person.class;
        System.out.println(p);
        Field[] fields = p.getFields();
        for (Field a : fields){
            System.out.println(a);
        }
        Field a = p.getField("a");
//        获取成员变量a的值
        Person p1 = new Person();
        Object o = a.get(p1);
        System.out.println(o);
        a.set(p1,"qwe");
        System.out.println(p1);
        System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!");
        Field[] declaredFields = p.getDeclaredFields();
        for (Field b : declaredFields){
            System.out.println(b);
        }
        System.out.println("@@@@@@@@@@@@@@");
        Field age = p.getDeclaredField("age");
        System.out.println(age);
        age.setAccessible(true);
        System.out.println("###############");
        Object o1 = age.get(p1);
        System.out.println(o1);

    }

在这里插入图片描述
例:

    public static void main(String[] args) throws Exception {
//        获取Person类的对象
        Class personClass = Person.class;
//        获取空参数构造方法
        Constructor constructor = personClass.getConstructor();
        System.out.println(constructor);
        System.out.println("!!!!!!!!!!!!");
//        获取有参数构造方法
        Constructor constructor1 = personClass.getConstructor(String.class,int.class);
        System.out.println(constructor1);
//        使用有参数构造方法创建对象
        Object obj = constructor1.newInstance("asd", 12);
        System.out.println(obj);
        System.out.println("$$$$$");
        //使用无参数构造方法创建对象方法一
        Object obj1 = constructor.newInstance();
        System.out.println(obj1);
        System.out.println("@@@@@");
        //使用无参数构造方法创建对象方法二
        Object o = personClass.newInstance();
        System.out.println(o);
    }

在这里插入图片描述
例:

    public static void main(String[] args) throws Exception {
//        获取Person类的对象
        Class p = Person.class;
        System.out.println(p);

//        获取指定名称的方法
        Method method = p.getMethod("eat");
        System.out.println(method);
//        执行方法,前提是要先创建对象
        Person person = new Person();
//        执行方法
        method.invoke(person);

        //获取指定名称带参数的方法
        Method method1 = p.getMethod("eat",String.class);
        System.out.println(method1);
//        执行带参数的方法
        method1.invoke(person,"米饭");

//        获取所有public修饰的方法,里面还包含Object类的方法
        Method[] methods = p.getMethods();
        for (Method methodd : methods){
            System.out.println(methodd);
//            获取方法名
            String name = methodd.getName();
            System.out.println(name);
        }

//        获取类名  ReflectDemo.Person
        String name = p.getName();
        System.out.println(name);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值