JAVA连载117-反射的应用与打破封装新
2020-05-23 16:02:24来源:博客园 阅读 ()
一、反射的概念
1.反射的概念是有Smith在1982年首次提出,主要是指程序可以访问、检测和修改它本身状态或者行为的一种能力,并且根据自身行为的状态和结果,调整或者修改应用所描述行为的状态和相关的语义。
2.Java中,反射是一种强大的工具,它使您能够创建灵活的代码,这些代码可以在运行时进行装配,无需在组件中进行源代码的链接。
3.反射允许我们在编写与执行的时候,使我们的代码能够装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码,这使得放射成为构建灵活的应用的主要工具,但是需要主要注意的是,如果使用不当,会造成不可预知的结果。?
package com.bjpowernode.java_learning; import java.util.Properties; import java.io.*; import java.util.*; import java.io.FileReader; //import com.bjpowernode.java_learning.classInfo.properties; ? public class D116_2_ClassInfo { public static void main(String[] args) throws Exception{ //1.创建属性对象 Properties p = new Properties(); //2.创建流 String address = "C:\\Users\\lenovo1\\Workspaces\\MyEclipse CI\\Java_learning\\src\\com\\bjpowernode\\java_learning\\classInfo.properties"; FileReader fr = new FileReader(address); //3.加载 p.load(fr); //4.关闭流 fr.close(); //通过key获取value String className = p.getProperty("className"); System.out.println(className); //通过反射机制创建对象 Class c = Class.forName(className); //创建对象 Object o = c.newInstance(); System.out.println(o); //这种方式与我们直接new一个对象有什么优势 //这种方式我们可以在外面设置properties属性文件来达到修改创建对象的方式 } }
二、获取某个指定的属性,并且可以打破封装性
package com.bjpowernode.java_learning; import java.lang.reflect.*; ? public class D117_2_Reflect { public static void main(String[] args) throws Exception{ //获取一个类 Class c = Class.forName("com.bjpowernode.java_learning.D117_1_Reflect"); //获取id属性 Field idF = c.getDeclaredField("id"); // System.out.println(idF); //获取到某个特定的属性?set,get Object o = c.newInstance(); //因为id是private,所以需要打破封装,下面这个方法可以打破权限 idF.setAccessible(true); //使用反射机制可以打破java程序的封装性,导致了Java对象的属性变得不安全了 //set方法,void idF.set(Object obj,Object value); idF.set(o, "004512");//给对象o的idF属性赋上“004512”这个值 } }
三、源码:
D117_1_Reflect.java
D117_2_Reflect.java
https://github.com/ruigege66/Java/blob/master/D117_1_Reflect.java
https://github.com/ruigege66/Java/blob/master/D117_2_Reflect.java
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料
原文链接:https://www.cnblogs.com/ruigege0000/p/12940653.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:可见性、原子性和有序性
下一篇:Tomcat安装
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash