网站首页 > java教程 正文
一、为什么使用反射
为了写通用性的代码,如框架等。编译时期不知道传入的对象的类型,无法调用方法和属性,所以框架为了实现通用性,将Object为参数,只在运行的时候通过该类的Class对象获得类的信息。
二、什么是反射
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。Java中,反射是一种强大的工具。它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接。反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。
三、怎么使用
主要方法:
1.得到Class对象 三种方式
(1)Class.forName("类的字符串全名")
Class> clazz = Class.forName("com.chapter14.Student");
(2)使用类.class 获得该类对应的Class对象
Class> clazz = Student.class;
(3)对象.getClass()方法
Object object = new Student();
Class> clazz = object.getClass();
2.得到构造函数 创建对象
(1)Object o = clazz.newInstance(); //Object o = new Student();
(2)使用Constructor创建对象,带declare 是得到所有访问权限的,不带declare是得到public的
得到所有构造函数:Constructor[] consArr =
clazz.getDeclaredConstructors();
Class[] clazzArr = new Class[]{int.class,String.class,int.class};
Constructor c = clazz.getDeclaredConstructor(clazzArr);
Object o = c.newInstance(1,"aaa",22);
3.得到方法,调用方法(对于方法来说declared能显示4种访问权限,不加declared 只有public + 父类的方法)
得到所有方法:Method[] methodArr = clazz.getDeclaredMethods();
对象.方法名(参数);
方法名.invoke(对象,参数);
4.得到属性
Field name = clazz.getDeclaredField("name");
name.setAccessible(true);//设值属性的访问性 破坏了封装
5.动态创建数组
String[] strArr = new String[5];
strArr[0] = "aaa";
Object objArr = Array.newInstance(String.class, 5);
---更多Java学习资料可关注微信公众号:kaigexuetang_com(长按可复制关注)
猜你喜欢
- 2025-03-19 Java 反射 和 Java new 的效率有什么区别,亲测相差100倍
- 2025-03-19 程序猿都要懂的Java反射机制(java反射机制是什么)
- 2025-03-19 java反射机制(java反射机制应用场景)
- 2025-03-19 Java的反射技术reflect(java反射的理解)
- 2025-03-19 Java 反射以及动态代理,来看就懂了
- 2025-03-19 Java——反射 暴力反射及其应用场景
- 2025-03-19 Java反射机制剖析(java反射机制的应用场景)
- 2025-03-19 JAVA反射的作用原理(java反射的实现原理)
- 2025-03-19 Java小白对反射的浅显理解(java反射的实际应用)
- 2025-03-19 如何使用Java的反射机制以及调用构造方法?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)