反射简单运用

1.概述

1.反射机制
    在编译的时候并不确定是哪一个类被加载,而是在程序运行的时候才加载.
指程序可以访问/检测和修改本身状态或行为的一种能力
​

2.作用

1.获取类型的相关信息
2.动态调用方法
3.动态创建对象

3.常见的类

Class
    概述
        用来描述类或接口的类型,描述类的类
    作用
        获取一个对象的类的信息
        获取一个类的访问修饰符/成员/方法/构造方法已经超类
        获取一个接口的常量和方法
        创建一个在程序运行时才知道名字的类的实例
        获取并设置一个在程序运行时才知道的类的实例的成员
        检测在运行时才知道名字的对象的方法

4.测试类

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
​
/**
 * @author chenjin
 * @date 2019/12/21 13:53
 */
public class demo {
    public static void main(String[] args) throws Exception{
        //获取用户类
        Class<?> aClass = Class.forName("User");
        //获取当前类的
        Class<demo> demoClass = demo.class;
        //Class<?> aClass1 = this.getClass();
​
        //获取构造方法(get德扩儿康思抓不特)
        Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
        //设置一下可以调用该构造方法的私有方法
        // 可以调用是私有方法
        declaredConstructor.setAccessible(true);
​
​
        //创建一个实体映射
        Object o = declaredConstructor.newInstance();
​
        //获取他的方法
        Method declaredMethod = aClass.getDeclaredMethod("sex");
        Method declaredMethod1 = aClass.getDeclaredMethod("nax");
        //
        declaredMethod.setAccessible(true);
        declaredMethod1.setAccessible(true);
        Object invoke = declaredMethod.invoke(o);
        Object invoke1 = declaredMethod1.invoke(o);
        System.out.println(invoke);
        System.out.println(invoke1);
​
​
        //获取user的属性
        Field age = aClass.getDeclaredField("age");
        age.setAccessible(true);
        System.out.println(age.get(o));
​
    }
}
​

5.实体类

/**
 * @author chenjin
 * @date 2019/12/21 13:53
 */
public class User {
​
    public User(){
        System.out.println("调用了无惨公共构造方法");
​
    };
    public User(String s){
​
        System.out.println("调用了有惨公共构造方法");
    };
​
​
​
    public String name;
    private Integer age = 1;
​
    public void sex() {
        System.out.println("公共方法sex");
    }
​
    private void nax(){
        System.out.println("私有方法nax");
    }
}
​

7.getDeclaredConstructor

获取该类的构造器

8.newInstance

创建实例对象

9.setAccessible

设置允许在调用的时候不去检查权限

10.invoke

调用该方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值