【黑马程序员】反射机制
来源:互联网 发布:八极拳小说知乎 编辑:程序博客网 时间:2024/06/05 17:17
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
视频中老师定义的反射概念:反射就是将java的各个成文映射成对应的java类。
对于这句话,我的理解是:一个类通过反射,可以将这个类本身作为一个类的对象。通过这个对象可以获得这个类的构造器、类中的属性、类中的方法,举个例子,有一个person类,里面有获得姓名和年龄的方法,就可以通过 getName和getAge方法获得姓名和年龄,而通过反射可以获得person这个类的类对象,通过类对象就可以有其中的方法,例如:
Class clazz = Person.class;
Methodmethod = clazz.getMethod(“getName”,参数值);method.invoke(); 通过这个方法就可以获得person类中的getName方法,并应用。
反射的好处:大大的增强了程序的扩展性。
反射的具体实现:
一、反射的基本步骤:
1、获得Class对象,就是获取到指定的名称的字节码文件对象。
2、实例化对象,获得类的属性、方法或构造函数。
3、访问属性、调用方法、调用构造函数创建对象。
二、获取这个Class对象,有三种方式:
1:通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。
2:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类。
前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。
3:使用的Class类中的方法,静态的forName方法。
指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。反射的用法总结:
1)、需要获得java类的各个组成部分,首先需要获得类的Class对象,获得Class对象的三种方式:
Class.forName(classname) 用于做类加载
obj.getClass() 用于获得对象的类型
类名.class 用于获得指定的类型,传参用
2)、反射类的成员方法:
Class clazz = Person.class;
Method method = clazz.getMethod(methodName,new Class[]{paramClazz1, paramClazz2});
method.invoke();
3)、反射类的构造函数:
Constructor constructor = clazz.getConstructor(newClass[]{paramClazz1, paramClazz2,...})
constructor .newInstance(params...)
4)、反射类的属性:
Field field = clazz.getField(fieldName);
field.setAccessible(true); //暴力获取,可以访问private类型的属性
field.setObject(value);
获取了字节码文件对象后,最终都需要创建指定类的对象:
创建对象的两种方式(其实就是对象在进行实例化时的初始化方式):
1,调用空参数的构造函数:使用了Class类中的newInstance()方法。
2,调用带参数的构造函数:先要获取指定参数列表的构造函数对象,然后通过该构造函数的对象的newInstance(实际参数) 进行对象的初始化。
综上所述,第二种方式,必须要先明确具体的构造函数的参数类型,不便于扩展。所以一般情况下,被反射的类,内部通常都会提供一个公有的空参数的构造函数。- 黑马程序员 反射机制
- 黑马程序员--反射机制
- 黑马程序员-反射机制
- 【黑马程序员】反射机制
- 黑马程序员 反射机制
- 黑马程序员-反射机制
- 黑马程序员----反射机制
- 黑马程序员 反射机制
- 黑马程序员--反射机制
- 黑马程序员------反射机制
- 黑马程序员------反射机制
- 黑马程序员-反射机制
- 黑马程序员----反射机制
- 黑马程序员-Java反射机制
- 黑马程序员-java反射机制
- 黑马程序员_Java反射机制
- 黑马程序员_反射机制
- 黑马程序员_反射机制
- HDU 1877 又一版 A+B 及 itoa函数 应用 头文件 #include <stdlib.h>
- Android增加键值(二)
- openjdk编译及调试
- Codeforces Round #196 (Div. 2) / 337B Routine Problem(数学)
- uva1339Ancient Cipher
- 【黑马程序员】反射机制
- 权限管理之基于ACL的实现:针对需求做分析和设计
- 解决javaWEB开发过程中后台接受前台的中文信息乱码的问题
- 苹果可能已经错失购买Twitter的最佳时机
- 老码农教你学英语
- android Installation failed due to invalid URI! 错误处理
- 微软笔试题,两天才懂
- hdu 1045 Fire Net(回溯搜索)
- ubuntu12 编译OpenJDK7u2