1、反射的概念java
1.反射的概念是有Smith在1982年首次提出,主要是指程序能够访问、检测和修改它自己状态或者行为的一种能力,而且根据自身行为的状态和结果,调整或者修改应用所描述行为的状态和相关的语义。node
2.Java中,反射是一种强大的工具,它使您可以建立灵活的代码,这些代码能够在运行时进行装配,无需在组件中进行源代码的连接。git
3.反射容许咱们在编写与执行的时候,使咱们的代码可以装载到JVM中的类的内部信息,而不是源代码中选定的类协做的代码,这使得放射成为构建灵活的应用的主要工具,可是须要主要注意的是,若是使用不当,会形成不可预知的结果。github
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属性文件来达到修改建立对象的方式 } }
2、获取某个指定的属性,而且能够打破封装性安全
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”这个值 } }
3、源码:微信
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.javaui
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,我的公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料