------- android培训、java培训、期待与您交流! ----------
黑马程序员——反射
<!--[if !supportLists]-->一、<!--[endif]-->什么是反射:
反射机制指的 是程序在运行时能够获得自身的信息,即在java中,当给定一个类的名字时,就可以通过反射机制得到该类的所有信息。
优点:实现动态创建对象和编译,体现出很大的了灵活性。
缺点:对性能有影响,这类操作总是鳗鱼只直接执行相同的操作。
<!--[if !supportLists]-->二、<!--[endif]-->Class类:
获得Class对象的三种方式:
<!--[if !supportLists]-->1、<!--[endif]-->调用某一个类的class属性,(得到的就是一个类的一份字节码文件)
<!--[if !supportLists]-->2、<!--[endif]-->使用Class类的forName(String className)静态方法
<!--[if !supportLists]-->3、<!--[endif]-->调用某个对象的getClass()方法。
九个预定义的Class对象:
byte,short,int,long,char,float,double,boolean以及关键字void。
<!--[if !supportLists]-->三、<!--[endif]-->如何利用Class类得到Constructor,Method。Field
构造函数:
getConstructor(Class<?> parameterTypes):得到指定的public构造方法。
getDeclaredConstructor(Class<?> parameterTypes):得到指定的构造方法,与访问权限无关。
getDeclaredConstrucor():得到所有的构造方法,与访问权限无关。
方法:
getMethod(String name,Class<?> parameterTypes):得到该对象表示类和其父类的指定的public
方法。
getMethods():得到对象表示类和其父类中的所有public方法。
getDeclaredMethod(String name,Class<?> parameterTypes):得到该对象表示类的指定方法,与访问权限无关。但不包含继承的方法。
getDeclaredMethods():得到类所有方法,与访问权限无关,但不包含继承的方法。
Field:
同理。
<!--[if !supportLists]-->四、<!--[endif]-->反射创建对象:
<!--[if !supportLists]-->1、<!--[endif]-->使用User.class.newInstance()(直接newInstance必须保证默认的构造方法正常存在,也就是没有被私有化)
<!--[if !supportLists]-->2、<!--[endif]-->获取该类的Class对象,利用Class对象的getConstructor()方法获取指定的构造方法,再调用Constructor的newInstance()方法创建对象。
注意:setAccessible(boolean flag)当flag为true时,忽略访问权限。
备注:对于此时的话,单例模式就不在安全了。
对于枚举而言,反射议案没有办法重新创建对象。
<!--[if !supportLists]-->五、<!--[endif]-->反射和泛型
通过指定对应的Class对象,程序可以获得该类中所有的Field,不管该Field使用何种权限,获得Field对象后都可以使用getTypes()来获取其类型。
利用反射来获取泛型的类型:
步骤:
<!--[if !supportLists]-->1、<!--[endif]-->获取当前类
<!--[if !supportLists]-->2、<!--[endif]-->获取目标字段
<!--[if !supportLists]-->3、<!--[endif]-->获取包含泛型类型的类型getGenericType()
<!--[if !supportLists]-->4、<!--[endif]-->强转至子类ParameterizedType,因为Type没有任何对应的方法。
<!--[if !supportLists]-->5、<!--[endif]-->获得泛型真正的类型getActualTypeArguments()
相关推荐
黑马程序员——Android移动开发源码
NULL 博文链接:https://xianglachigen.iteye.com/blog/1564376
黑马程序员入学Java知识——精华总结
|--aidl之结合反射获取应用缓存大小等空间占用 |--aidl调用系统service未公开的方法挂电话 |--aidl调用系统未公开的方法代码示例2 |--android dp和px之间转换 |--android INSTALL_PARSE_FAILED_MANIFEST_MALFORMED |...
正在自学黑马程序员Java全套,目前只学了Javase,接下来是Javaweb,把自己整理的笔记分享一下。
黑马程序员Javaweb教材源代码,适合学习配套使用
黑马程序员 C语言提高课程配套课件 黑马程序员 C语言提高课程配套课件
黑马程序员c++配套课件 《轻松搞定c++语言》 黑马程序员c++配套课件 《轻松搞定c++语言》
《JavaWeb程序设计任务教程》一书源代码,中国工信出版社出版,黑马程序员编著,传智播客旗下高端教育品牌“黑马程序员”项目实战配套用书
黑马程序员,C++核心编程
Javaweb基础全课程笔记,黑马程序员上课笔记,主要涉及前端 jsp和servlet等
layui ajax 没有node.js功能都可用,高度类似。 黑马刘龙彬老师主讲的大事件项目,整体看完,给...最后,再次给黑马程序员和刘老师点个赞。 说明--ShowDoc https://www.showdoc.com.cn/escook?page_id=3707158761215217
黑马程序员入学面试题,复习必备,事半功倍。
本人参加黑马程序员考试的题目加上本人的解答!不是让谁作弊,因为题库的题目对每个人会有些许的变化。题库题目的难度很类似,就当是你参加模拟考试了!哈哈,附本人的详解的哦!
黑马程序员网上图书商城中的毕业设计资料,代码,数据库设计论文等
《JavaWeb程序开发进阶》-黑马程序员配套资源ppt。
Netty基础,用于学习Netty,参考黑马程序员的netty教程
《MySQL数据库原理、设计与应用》课后习题及答案 黑马程序员编著 答案都是正确的,因为是老师给的资源。 如果不想下载,也可以去我的博客看,一模一样的。 ...
月薪过万的入门必知知识,黑马程序员入学Java精华总结
黑马程序员JavaEE49期