反射

什么是Java反射

就是正在运行,动态获取这个类的所有信息。

反射机制的作用

1,反编译:.class–>.java
2.通过反射机制访问java对象的属性,方法,构造方法等;

代码如下:
bean类

package com.luozhiyuan.reflection;

/**
 * create by
 *
 * @Author luozhiyuan
 * @qq 707530775@qq.com
 * @on 2019-06-01.
 * @time 16:49
 */
public class UserEntity {
    private String userName;

    public UserEntity() {
        System.out.println("userEntity的无参构造方式创建对象");
    }

    private UserEntity(String userName) {
        this.userName = userName;
        System.out.println("通过有参构造方法创建userName为"+userName+"的对象。");
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
}

测试反射用法

package com.luozhiyuan.reflection;

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

/**
 * create by
 *
 * @Author luozhiyuan
 * @qq 707530775@qq.com
 * @on 2019-06-01.
 * @time 16:51
 */
public class reflectionTest {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        // 1.通过new方式创建对象
        UserEntity userEntityNew = new UserEntity();
        // UserEntity userEntityNew2 = new UserEntity("zhangsan");

        // 2.通过反射创建一个对象(无参构造函数)
        // 使用Java的反射机制创建对象 类的完整路径
        Class forName = Class.forName("com.luozhiyuan.reflection.UserEntity");
        // 使用反射机制创建对象
        UserEntity userEntityReflection = (UserEntity) forName.newInstance();

        userEntityReflection.setUserName("通过反射创建对象。");
        System.out.println(userEntityReflection.getUserName());

        // 使用反射机制 获取类的方法信息
        Method[] methods = forName.getMethods();
        for(Method method : methods){
            System.out.println("++++++++++++++++++");
            System.out.println(method.getName());
        }

        // 获取类属性
        Field[] fields = forName.getDeclaredFields();
        for(Field field : fields){
            System.out.println("*************************");
            System.out.println(field.getName());
        }

        // 3.通过反射创建一个对象(有参构造函数)
        Constructor<?> constructor = forName.getDeclaredConstructor(String.class);
        // 如果bean类用private修饰,则应该修改访问权限
        constructor.setAccessible(true);
        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$");
        UserEntity userEntity = (UserEntity) constructor.newInstance("lisi");
        System.out.println(userEntity.getUserName());
    }
}


在这里插入图片描述

总结:实例化类的方式可以通过反射实现,如果bean类用private修饰,则应该将访问权限设置为true。否则会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值