JAVA连载117-反射的应用与打破封装新

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.欢迎关注微信公众号:傅里叶变换,我的公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

 

相关文章
相关标签/搜索