反射
2016-05-03 22:47
330 查看
reflect 反射
动态性,描述语言的动态,java是有一定动态性的语言。体现在可以在运行期探究和使用编译期未知的东西,包括类,构造,属性,方法等等。
类加载:由类加载期完成,类的class文件被读入内存后,就会创建一个class对象,类的所有信息就会放入class对象中,同一个类只被载入一次。
连接:把类的二进制数据合并到JRE中。
初始化:JVM负责对类进行初始化,也就是对静态属性进行初始化。
一,反射产生对象
1.获取class对象
1.1根据实例对象获取class对象,
实现方法:调用实例对象的getClass(),该方法来自object类
动态性:无
适用范围:只能适用引用数据类型
1.2根据类型名获取Class对象
实现方法:调用类型名.class
适用范围:基本,引用,甚至包括void的
动态性:无
1.3根据类型的字符串名称获取对象(唯一一个可以配置)
实现方法:调用class.forName(“类的限定名”)
适用范围:只有类类型,包括接口
动态性:有
2.通过class对象探究这个类的信息
2-1探究类的声明部分的信息
String packageName = stuClass.getPackage().getName();//得到全类名
System.out.println(“package”+packageName+”;”);
String className = stuClass.simpleName();//得到简单类名
int classMod = stuclass.getModifiers();//得到修饰符,返回的数字
2-2探究属性
Field[] allpublicFields = stuClass.getFields();//得到所有公共属性
Field[] allFields = stuClass.get.DeclaredFields();//得到所有被申明的属性
2-3探究构造
Constructor[] allPublicCons = stuClass.getConstructor();//得到所有的公共构造
Constructor[] allCons = stuClass.getDeclaredConstructor();
(class…)当数组用来做参数的时候,三个点的申明方式是语法糖,外部的调用者无须创建数组实参,内部的实现者,任然按数组的方式使用形参
2-4探究方法
Method[] allPublicMethods = stuClass2.getMethods();//所有公开的方法
Method[] allMethods = stuClass2.getDeclaredMethods();//所有被申明的方法
try {
Method thePublicMethod = stuClass2.getMethod(“thst2”, int.class);//指定的公共的方法
Method theMethod = stuClass2.getDeclaredMethod(“test3”, int.class,String.class);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
3.操作从class中探究出的信息
二,通过反射探究类(属性,方法等)
三,在运行期探究使用任意方法,任意属性,任意构造,从而体会反射的动态性
<
4000
link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/production/markdown_views-ea0013b516.css" />
相关文章推荐
- Java反射
- 86_OOM异常
- django框架从零开始_005_管理界面
- display与visibility的区别
- tornado用户指引(六)------Tornado web应用程序结构(一)之Applicaton对象
- poj-2756-Autumn is a Genius
- hdu-5349-MZL's simple problem
- django实现用户注册、登录、退出
- leetcode-69. Sqrt(x)
- Hadoop 2.x 伪分布式环境部署
- Bitmap和Drawable详解
- 85_线程导致的内存泄漏
- 华为面试题
- 在eclipse中运行Mapreduce & spark
- 关于“万物皆数”的一些观点
- 9. Palindrome Number [easy] (Python)
- fzoj Problem 2233 ~APTX4869 【并查集】
- iOS 开发中的消息机制-代理、通知、block
- 线程生命周期
- 使用PyMySQL操作mysql数据库