JAVA知识点总结-17类加载器,反射
来源:互联网 发布:什么叫人工智能技术 编辑:程序博客网 时间:2024/06/05 16:15
一:反射:通过字节码文件对象去使用成员
在有getConstructors() getDeclaredConstructors()
有D的时候是可以访问私有,有s是所有
用方法对象调用invoke方法,确定由哪个对象去执行方法本身
m.invoke(obj, 10);
1. 获取字节码文件对象的三种方式:
A.Object类的getClass()方法
Person p1 = new Person();
Class c1 = p1.getClass();
B.数据类型的静态class属性
Class c3 = Person.class;
C.Class类的静态方法forName()
Class c4 = Class.forName("westo.org.java.Person"); 这里的路径是带包的类名
2. Class c = Class.forName("westo.org.java.Person");
Constructor[] cons = c.getConstructors(); 获取这个类中的所有构造方法
Constructor[] cons2 = c.getDeclaredConstructors(); 获取这个类中多有的构造方法,包括私有
Object obj = con.newInstance(); 用获得的无参构造创建对象
Constructor con2 = c.getDeclaredConstructor(String.class, int.class, String.class);
con2.setAccessible(true); 取消访问修饰符的限制
如果要取得的Field是private的,那么就要调用setAccessible(true),否则会报错Object obj2 = con2.newInstance("陈奕迅", 45, "香港");
3.反射的使用步骤
Class:
成员变量 Field
构造方法 Constructor
成员方法 Method
class字节码文件对象 -- 去得到对应的成员对象 -- 通过该成员的对象调用方法使用
A.Field
1.Class c = Class.forName("westo.org.java.Person"); 创建字节码文件对象
2.Constructor con = c.getConstructor(); 获取构造方法
3.Object obj = con.newInstance(); 通过构造方法创建对象
4.Field[] fields = c.getFields(); 获取公共成员变量
5.Field[] fields2 = c.getDeclaredFields(); 获取公共成员变量,包括私有
6.Field f = c.getDeclaredField("name"); 传入变量名称返回指定的成员变量对象
f.setAccessible(true); 取消访问修饰符的限制
f.set(obj, "谢娜"); 传参
System.out.println(obj); 输出
B.Method
1.Class c = Class.forName("westo.org.java.Person"); 创建字节码文件对象
2.Constructor con = c.getConstructor(); 获取构造方法
3.Object obj = con.newInstance(); 通过构造方法创建对象
4.Method[] methods = c.getMethods(); 获取所有公共成员方法,包括父类的公共成员方法
public Method getDeclaredMethod(String name,Class<?>...parameterTypes)
参数一:方法名 参数二:方法参数类型.class 获取指定的方法,包括私有
5.Method m = c.getMethod("method"); 获取这个方法
m.invoke(obj); 使用obj这个对象调用m表示的方法
6. Method m4 = c.getDeclaredMethod("show",String.class,String.class);
m4.setAccessible(true);
m4.invoke(obj, "张杰","谢娜");
我给你ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
//1.创建ArrayList类对应的字节码文件对象
ArrayList<Integer> arr = new ArrayList();
Class c = arr.getClass();
//2.通过字节码文件对象获取到add方法对象
Method addM = c.getDeclaredMethod("add", Object.class);
//3.调用add方法的对象,给集合中添加字符串
addM.invoke(arr, "java");
addM.invoke(arr, "world");
System.out.println(arr);
- JAVA知识点总结-17类加载器,反射
- Java反射知识点总结
- java反射知识点总结
- Java反射知识点总结
- Java反射知识点总结
- 黑马程序员 知识点总结-Java类加载器
- 1Java类加载机制和反射零散知识点
- android中的重要java知识点回顾1(枚举、反射、类加载器等)
- java [反射] [类加载器]
- java [反射] [类加载器]
- java反射---类加载器
- 黑马程序员 知识点总结-Java反射
- 黑马程序员---Java高新技术反射知识点总结
- Java基础之反射知识点总结
- 【学习日记】java反射的知识点总结
- Java的灵魂--反射知识点总结
- Java基础之反射知识点总结
- #Java 类加载 反射
- 安卓四大组件之activity
- Unity3D中的Quaternion(四元数)
- 虚拟机新建一个硬盘并进行使用
- Java学习笔记-《Java程序员面试宝典》-第四章基础知识-4.1基本概念(4.1.6-4.1.7)
- 硬件访问服务1之编写第1个Android应用程序实现按钮和复选框
- JAVA知识点总结-17类加载器,反射
- 论文笔记——《Amortised MAP Inference for Image Super-Resolution》ICLR2017
- php 使用$_GET获取信息为空时,报错解决方法
- 对于node.js中的模块的理解
- Hibernate学习(2)
- 新概念4-4
- java--if条件控制
- LaTex调整文章行间距
- CodeForce 416 (Div. 2) A. Vladik and Courtesy