反射的基本使用

java反射

反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法

反射的使用:

A:通过反射获取构造方法并使用

/* 反射:就是通过class文件对象,去使用该文件中的成员变量,构造方法,成员方法。
        一:通过反射获取无参构造方法访问
        二:通过反射获取有参构造方法访问*/
//1.获取字节码文件对象
Class aClass = Class.forName("com.user");
//2.获取所有的公共的构造方法
Constructor[] constructors = aClass.getConstructors();
//2.1获取所有的的构造方法(包括私有的)
Constructor[] constructors1 = aClass.getDeclaredConstructors();
//循环输出
for (Constructor constructor : constructors) {
  System.out.println(constructor);
}
//3.获取单个构造方法
//3.1返回的是无参构造方法对象
Constructor constructor = aClass.getConstructor();
//3.2返回的是有参构造方法对象
Constructor constructor1 = aClass.getConstructor(String.class, Integer.class);
//4.通过构造方法创建对象(有参括号加参数)
Object object = constructor1.newInstance("柿子", 20);
System.out.println(object);

B:通过反射获取成员变量并使用

//获取字节码对象
Class aClass = Class.forName("com.user");

//获取所有成为成员变量
Field[] fields = aClass.getDeclaredFields();
        for (Field field : fields) {
            System.out.println(field);
        }

//通过构造方法创建对象
Constructor constructor = aClass.getConstructor();//获取构造方法
Object user = constructor.newInstance();//创建对象

//修改单个成员变量的值
Field field = aClass.getDeclaredField("name");//获取单个属性
field.setAccessible(true);  //设置私有变量必须要暴力访问
field.set(user, "柿子");//表示把对象user的name属性赋值
System.out.println(user);

C:通过反射获取成员方法并使用

//1.获取字节码对象
Class<?> aClass = Class.forName("com.user");
//获取所有的方法
Method[] methods = aClass.getMethods();//获取自己的包括父亲的公共方法
Method[] methods1 = aClass.getDeclaredMethods();//获取自己的所有的方法(不包括构造方法,getset方法)
for (Method method : methods1) {
  System.out.println(method);
}

Object user = aClass.getConstructor().newInstance();//对象
//获取单个方法 参数一是方法名,参数2.3.4...是方法参数类型(私有方法要暴力使用)
//Method method = aClass.getMethod("show", String.class);
Method method = aClass.getDeclaredMethod("show", String.class);
method.setAccessible(true);
//方法使用,返回方法的返回值 参数一是对象名 参数2.3.4...是方法参数值
Object a = method.invoke(user, "柿子");
System.out.println(a);

D:注意事项:

1.在获取私有构造方法,私有属性变量,私有方法时一定要暴力使用

2.在获取私有方法属性构造方法时,方法里面带Declared

method.setAccessible(true);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值