当前位置: 首页 > news >正文

java——了解反射

目录

什么是反射?

反射如何获取类信息?

小结:


什么是反射?

               反射是用代码分析类信息的能力

类中有哪些信息:方法、对象、构造器、全局变量、父类、接口等....

反射如何获取类信息?

三种方式

1.通过对象的getClass方法进行获取

2.通过Class.forName()方法获取

3.通过静态属性class可直接获取到该类型对应的Class对象 例如:T.class 将代表匹配的类对象

面试题:反射能不能通过反射访问类的私有信息?

                   可以   将下面代码设置成true

 

 这种方式为暴力反射,写个demo演示一下

获取全局变量信息的方式 Filed:

public class Reflection {private String name;@Overridepublic String toString() {return "reflection{" +"name='" + name + '\'' +'}';}
}
class violence{public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {Reflection reflection = new Reflection();Field name = Reflection.class.getDeclaredField("name");name.set(reflection,"小黑子");System.out.println(reflection);}
}
  name.setAccessible(true);   不加这行代码时运行结果: 

 

 报错显示 无法直接访问private修饰的私有成员name属性

Exception in thread "main" java.lang.IllegalAccessException: 
Class com.qcby.test.demo.violence can not access a member of class 
com.qcby.test.demo.Reflection with modifiers "private"

添加后:就能够访问name属性了

小结:

反射获取类的全局变量

1. 类对象.getDeclaredFields() 获取所有的全局变量 需要使用Filed[]接收

2. 类对象.getFields() 获取所有的public修饰的全局变量 需要使用Filed[]接收

3. 类对象.getDeclaredField(“变量名”) 能够获取指定的任何修饰符修饰的全局变量信息 需要使用Filed接收

4. 类对象.getField(“变量名”) 能够获取指定的public修饰符修饰的全局变量信息 需要使用Filed接收

返回获取方法 Method:

public class Reflection {private String name;private void setName(String name) {this.name = name;}@Overridepublic String toString() {return "reflection{" +"name='" + name + '\'' +'}';}
}
class violence{public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {Reflection reflection = new Reflection();
//        Field name = Reflection.class.getDeclaredField("name");
//        name.setAccessible(true);
//        name.set(reflection,"小黑子");Method setName = Reflection.class.getDeclaredMethod("setName", String.class);setName.setAccessible(true);setName.invoke(reflection,"cxk");System.out.println(reflection);}
}

小结:

获取类的方法的方式

1. 类对象.getDeclaredMethods() : 这种方式 获取所有的 方法信息 Method[]

2. 类对象.getMethods() : 这种方式 获取public修饰的 方法信息 Method[]

3. 类对象.getDeclaredMethod("方法名",所有参数的类型) 获取所有的指定的方法信息 Method

4. 类对象.getMethod("方法名",所有参数的类型) 获取public的指定的方法信息 Method


以上是个人对反射学习后的总结,希望对你有帮助,不足请补充!

http://www.lryc.cn/news/34317.html

相关文章:

  • The Sandbox 中的独特体验——《奥米加》
  • 76 Python写入csv文件时出现空行_newline参数解决
  • 高等数学——定积分和不定积分
  • imx6 usb增强信号强度
  • 深入理解性能压测工具原理
  • Java的概述和运行方式
  • 【C语言】每日刷题 —— 牛客
  • JavaEE课程实践-Servlet的部署(tomcat服务器)
  • Java 中的拆箱和装箱
  • 从0开始自制解释器——实现多位整数的加减法计算器
  • (12)C#传智:File类,泛型,字典,FileStream,StreamReader,多态
  • Dubbo的服务暴漏与服务发现源码详解
  • Python 的IDE——PyCharm
  • 01 C语言使用链表实现队列(Queue、FIFO)模块
  • 2.2操作系统-进程管理:前趋图、前趋图与PV操作
  • 凤凰游攻略
  • Nginx 高可用方案
  • Linux基本指令
  • Linux系统基础命令(二)
  • 【C++】C++11——简介|列表初始|简化声明|nullptr与范围for|STL中的变化
  • Python -- 函数
  • Pytorch中utils.data 与torchvision简介
  • 学习 Python 之 Pygame 开发魂斗罗(十)
  • Keepalive+LVS群集部署
  • 数组、指针总结【面试题】
  • 七色电子标签
  • 大数据是什么?发展前景怎么样
  • MYSQL必知必会 | 查询相关
  • Java学习环境一站说明(保姆级详细教学)
  • 05-Oracle中的对象(视图,索引,同义词,系列)