Android 反射
一、什么是反射
反射,即Reflection,通常是指程序可以访问、检测和修改它本身状态或行为的一种能力。
具体说来,是在运行状态时,对于任意一个类或对象,能够知道和操作它的任意方法和属性。
需要注意的是,反射是一种非常规手段,反射有风险,应用需谨慎。
二、为什么要用反射
为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念:
- 静态编译:在编译时确定类型,绑定对象,即通过。
- 动态编译:运行时确定类型,绑定对象。
反射的初衷不是方便你去创建一个对象,而是让你在写代码的时候可以更加灵活,降低耦合,提高代码的自适应能力.
利用反射机制,我们可以动态调用一些protected甚至是private的方法或类,这样可以满足我们一些场景下的特殊需求。
三、Reflection API 几个重要类
- Class:类
- Field:类的成员变量
- Method:类的方法
- Constructor:类的构造方法
四、如何使用反射
1、获取Class对象
方法一:类名.class
Class<?> cls = Student.Class();
Student student =(Student)cls.newInstance();
方法二:Class.forName(类路径)
Class<?> class = Class.forName("com.kwmax.Student"); //forName(包名.类名)
Student student = (Student)class.newInstance();
方法三:对象.getClass()
Student stu1 = new Student();
Class<?> cls = student.getClass();
student stu2 = (Student)cls.newInstance();
三种方法的区别:
方法一不执行静态块和动态构造块,
方法二执行静态块、不执行动态构造块,
方法三需要创建对象,静态块和动态构造块均会执行
2、获取类属性
//下面两种可以获取到public属性
mClass.getField(属性名);
mClass.getFields();//返回指定名的属性,不论公共还是私有
mClass.getDeclaredField(属性名);
//返回所有属性,不论公共还是私有
mClass.getDeclaredFields();
3、获取类方法
//下面两种可以获取到public方法
mClass.getMethod(方法的名称);
mClass.getMethods();//返回指定名的方法,不论公共还是私有
mClass.getDeclaredMethod(方法的名称);
//返回所有属性,不论公共还是私有
mClass.getDeclaredMethods();
4、获取构造方法
//下面两种可以获取到public方法
mClass.getConstructor(可变参数集合);
mClass.getConstructors();//返回指定名的构造方法,不论公共还是私有
mClass.getDeclaredConstructor(参数类名);//返回所有构造方法,不论公共还是私有
mClass.getDeclaredConstructors();
5、实例化对象
除了第一种方法,获取类对象后实例化,还可以通过构造方法实例化
constructor.newInstance(可变参数);
6、一些可能用到的操作方法:
//获取到反射的权限,如果为私有的则需要设置为true
constructor.setAccessible(true);
method.setAccessible(true)//设置属性值
field.set(Objkect obj,Object value);//获取属性对象
field.get(Object)
例子:Person p = (Persion)filed.get(对象);//获取这个类的父类
getSuperclass()//获取这个类实现的所有接口
getInterfaces()//获取方法的返回类型
getReturnType()
Android 反射相关推荐
- Android 反射 换一种方式编程
Android 反射-换一种方式编程 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933 本文出自[赵彦军的博客] 上一 ...
- Android : 反射机制获取或设置系统属性(SystemProperties)
Android.os.SystemProperties 提供了获取和设置系统属性的方法,但是这个类被隐藏了,应用开发时无法直接访问,可以通过反射的机制进行操作. 获取系统属性 public stati ...
- Android 反射、代理调用系统隐藏API方法与接口类连接Wi-Fi
本文转载自:http://www.xwdoor.net/android-reflection-proxy-call-system-hidden-api-method-and-interface-cla ...
- Android 反射获取内外置存储卡方法
2019独角兽企业重金招聘Python工程师标准>>> 以前的Android(4.1之前的版本)中,SDcard跟路径通过"/sdcard"或者"/mn ...
- android反射开启通知_Android中反射的简单应用
自己对反射的理解和应用还处于比较浅显的阶段,写这篇文章更多在于整理总结,也就是帮助自己进一步的理解和学习反射机制. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修 ...
- Android反射修改view,Android 修改viewpage滑动速度的实现代码
1.自定义Scroller public class ViewPageFixedSpeedScroller extends Scroller { private int mDuration = 300 ...
- Android反射set/get系统属性(SystemProperties)
以Android系统版本号和SDK版本号为例 # setprop ro.build.version.sdk 23 # setprop ro.build.version.release 5.1.1 fr ...
- android 反射机制
Android系统内部提供了一个不错的txt文本读写类,但目前并没有公开提供给标准的SDK,FileUtils类的源代码如下,可以很好的操作Linux下的文本文件. public class File ...
- android反射调用护眼模式
android 11反射调用护眼模式/夜间模式 Android 10 推出了 COLOR_DISPLAY_SERVICE 系统服务,具备系统 API 接口,使系统."设置"和系统界 ...
- android反射替换字体,快速使用反射更换Android全局字体
问题背景 之前在编写鲤鱼日语时,因为使用了外部的字体,这导致了一个问题就是我的ListView显示的是圆滑的字体,但是其他dialog.Spinner就全都是Android默认字体,这样不统一就会很难 ...
最新文章
- java中子类对父类中的私有变量和私有方法有拥有权无使用权
- Bootstrap CustomBox 弹层
- i 智慧 | 深度广度并举,AWS容器服务再推利器!
- oracle sql last_value,図でイメージするOracle DatabaseのSQL全集 第3回 分析関数
- 常用的几个提高iOS开发效率的开源类库及工具
- 以太坊核心开发者正在制定ETH2.0合并最低技术规范
- 小程序 实名信息_微信小程序+商城信息管理系统
- 常用集合(ArrayList、Hashset、HashMap)的用法(会一直更新)
- 启动 Tomcat 日志乱码问题
- PTA离散数学集合论自测(有答案)
- 笔记本单/双网卡如何同时上内外网
- 高一计算机网络技术应用计划,高一信息技术第一学期教学计划
- poi导出excel文件乱码
- 德州市德城区农产品区域公用品牌“尚德诚品”正式发布
- 服务器文件夹怎么用快捷方式打开,文件夹变成快捷方式怎么办 文件夹变成快捷方式解决方法...
- java reflection 作用,全方位解读Java反射(reflection)
- 服务器重启后启动php项目
- 缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印
- 【实验2 选择结构】7-9 sdut-C语言实验-三位数整数的各位数字
- 聊聊并发编程的12种业务场景
热门文章
- Linux多线程编程-互斥锁
- “美国饿了么”DoorDash完成6亿美元融资 估值升至126亿美元
- 计算机专业考研也上岸分,考研分数或将“上涨”的专业,想要成功上岸,最少达到380分...
- Caffe: 为什么你的tf模型转caffemodel老不对?(其中一个重要原因)
- Mac iTerm2 rz sz
- mysql创建索引的关键字为_MySQL创建索引(CREATE INDEX)
- 通过weui-1.1.3源码学习前端开发(三)从example看起-src/index.html文件
- 基于MATLAB搭建的两端LCC- HVD C输电模型,两端交流电网为345KV
- coreseek中文搜索引擎简述及使用
- android 字体失真,Android 图片及文字模糊效果