使用反射机制调用属性和私有成员与代理模式的介绍
来源:互联网 发布:mysql utf8 utf8mb4 编辑:程序博客网 时间:2024/06/05 04:50
使用反射机制调用属性:
通过反射机制可以获得类的属性,获得到的属性同样的可以进行赋值、得值操作,调用getField方法并传递属性的名称可以获得【学Java,到凯哥学堂kaige123.com】指定的属性,调用getFields方法则可以获得全部属性,但是这种方式不能获得私有属性: 代码示例:
Student类示例:
运行结果:
从运行结果可以看出只拿出了公开的属性,私有的属性拿不到。
使用反射机制调用私有成员:
1.调用私有属性
在反射机制里调用私有属性需要通过getDeclaredFields方法或者getDeclaredField方法,前者是获得类里所有的私有属性,后者是获得指定的私有属性,类似于getFields和getField。但是使用getDeclaredFields或者getDeclaredField方法获得私有属性之后需要再调用setAccessible方法进行一个调用授权的操作才能对获得到的私有属性进行操作: 代码示例:
Student代码示例:
运行结果:
2.调用私有方法 调用私有方法也是一样的,需要先通过getDeclaredMethods方法或者getDeclaredMethod方法来获得私有方法,然后还得再调用setAccessible方法进行调用授权: 代码示例:
Student代码示例:
运行结果:
3.调用私有构造器
Student代码示例:
运行结果:
代理模式: 代理模式又称为切面编程,顾名思义就是可以把代码切开一个缝隙塞入一些代码,代理模式可以在方法的前后监控异常,也可以把日志打印语句放在代理里,方法里就不需要写日志打印的语句了,资源的开启和关闭这种重复次数多的的代码也可以写在代理里,同样的在方法里就不需要再写了,所以代理模式类似于中介一样,在代码中间解决一些反复而常规的代码。 编写代理模式的代码,第一步是写一个接口声明一个方法,第二步写一个A类去实现这个接口,在方法里写上一些代码,第三步写一个B类,这个类也要实现接口,并且在这个类的属性上声明接口的变量,构造器里声明接口类型的参数,用于把对象存储到属性里,接着在重写接口的方法里调用A实现类里的方法,第四步写运行类,在main方法里首先new A类的对象出来,然后new B 类的对象并且把A类的对象放进B类的构造器里,最后用B类的对象调用方法。 代码示例:
运行结果:
代码图解:
还可以使用继承的方式编写代理模式,但是继承有个弊端,万一这个类不允许被继承(final修饰的类),或者还需要继承其他的类(Java只能单一继承),那么就无法编写代理模式,因为接口可以实现多个,所以使用接口是最好的。 代码示例:
运行结果:
代码图解:
- 使用反射机制调用属性和私有成员与代理模式的介绍
- 使用反射机制调用属性和私有成员与代理模式的介绍
- Java反射机制,通过对象访问调用类的私有成员属性或者方法
- 反射(四)使用反射机制调用对象的私有方法及成员变量
- 使用反射调用私有属性和方法
- JavaSE第六十四讲:使用反射机制调用对象的私有方法、访问对象的私有成员变量
- 使用 反射 改变私有成员属性的值
- Java反射机制(三):调用对象的私有属性和方法
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- 使用Java反射机制访问类的私有属性
- 利用java的反射机制调用类的私有方法及私有属性
- 反射机制的概述和字节码对象的获取,通过反射获取构造方法并使用;通过反射获取成员变量并使用;通过反射获取私有成员变量并使用;通过反射获取成员方法并使用
- java 使用反射机制来获取私有方法和成员变量
- Java通过反射调用其他类的私有属性和私有方法
- 使用类的反射机制来访问类的私有成员变量
- Java反射学习总结二(用反射调用对象的私有属性和方法)
- 反射调用属性成员
- 探讨代理模式与Java反射机制的应用
- java 解析苹果安装包,解析出标识,图标等信息
- Java创建pojo对象对web或者移动端页面显示需求的承载(折扣计算)
- Oracle分区索引--本地索引和全局索引比较
- 开发过程遇到的IE兼容性问题以及解决方案
- 【Python爬虫系列】使用requests爬取图片
- 使用反射机制调用属性和私有成员与代理模式的介绍
- numpy中arange和reshape的用法
- C++ 删除文件夹
- leetcode 234. Palindrome Linked List
- gpstop failed. (Reason='int() argument must be a string or a number, not 'NoneType'') exiting...
- 各种数据库的jdbc驱动下载及连接方式
- linux基础命令学习笔记~1
- 一个线程的独白
- FatMouse's trade