第一条博客从这里开始
来源:互联网 发布:制作统计图的软件 编辑:程序博客网 时间:2024/06/06 03:44
- java 反射 Field类
- package com.ncs;
- public class Point {
- private int x;
- public int y;
- public Point(int x, int y) {
- super();
- this.x = x;
- this.y = y;
- }
- }
- package com.ncs;
- import java.lang.reflect.Field;
- //need another bean Point
- public class ReflectTest {
- //★这里说的Field都是 类 身上的,不是实例上的
- public static void main(String[] args) throws Exception {
- Point pt1 = new Point(3,5);
- //得到一个字段
- Field fieldY = pt1.getClass().getField("y"); //y 是变量名
- //fieldY的值是5么?? 大错特错
- //fieldY和pt1根本没有什么关系,你看,是pt1.getClass(),是 字节码 啊
- //不是pt1对象身上的变量,而是类上的,要用它取某个对象上对应的值
- //要这样
- System.out.println(fieldY.get(pt1)); //这才是5
- //现在要x了
- /*
- Field fieldX = pt1.getClass().getField("x"); //x 是变量名
- System.out.println(fieldX.get(pt1));
- */
- //运行 报错 私有的,找不到
- //NoSuchFieldException
- //说明getField 只可以得到 公有的
- //怎么得到私有的呢??
- /*
- Field fieldX = pt1.getClass().getDeclaredField("x"); //这个管你公的私的,都拿来
- //然后轮到这里错了
- // java.lang.IllegalAccessException:
- //Class com.ncs.ReflectTest can not access a member of class com.ncs.Point with modifiers "private"
- System.out.println(fieldX.get(pt1));
- */
- //三步曲 一是不让你知道我有钱 二是把钱晃一下,不给用 三是暴力抢了
- //暴力反射
- Field fieldX = pt1.getClass().getDeclaredField("x"); //这个管你公的私的,都拿来
- fieldX.setAccessible(true);//上面的代码已经看见钱了,开始抢了
- System.out.println(fieldX.get(pt1));
- //out 3 OK!!
- }
- }
下面做的小实验,把一个类里所有String类型的字段里的值********** b 变 a
- package com.ncs;
- public class Point {
- private int x;
- public int y;
- public String s1 ="ball";
- public String s2="hubin";
- public String s3="zhangxiaoxiang";
- //做实验而已,字段不可能是 public 的
- public Point(int x, int y) {
- super();
- this.x = x;
- this.y = y;
- }
- }
- package com.ncs;
- import java.lang.reflect.Field;
- //need another bean Point
- public class ReflectTest {
- public static void main(String[] args) throws Exception {
- Point pt1 = new Point(3,5);
- //get all fields
- Field[] fields = pt1.getClass().getFields();
- for(Field field : fields ) {
- //我说的是String 类型的字段,当然要选择一下
- //if(field.getType().equals(String.class)) {
- //字节码都是一份的,干什么用equals啊
- if(field.getType()== String.class) {
- String oldValue = (String)field.get(pt1);
- String newValue = oldValue.replace('b', 'a');
- //改 对象的字段
- field.set(pt1, newValue);
- }
- }
- System.out.println(pt1.s1);
- System.out.println(pt1.s2);
- System.out.println(pt1.s3);
- //aall
- //huain
- //zhangxiaoxiang
- }
- }
0 0
- 第一条博客从这里开始
- 难道博客从这里开始
- 从这里开始写博客
- 博客就从这里开始吧
- 第一篇博客从这里开始
- 我的博客之路从这里开始
- 从这里开始吧
- 一切从这里开始
- 生活从这里开始
- 从这里开始
- 从这里开始
- 从这里开始
- 编程从这里开始
- 从这里开始。。。
- 从这里开始吧
- 从这里开始
- 一切从这里开始
- 从这里开始
- Python -面向对象(一 基本概念)
- ortp库API说明
- MyEclipse中修改默认JSP编辑器的方法.txt
- Java Resource路径小结
- java中的abstract关键字
- 第一条博客从这里开始
- Android自定义组件系列【6】——进阶实践(3)
- Starfish中如何实现性能分析(1)
- excel条件格式--根据数值来设置单元格格式,呈阶梯形效果
- Vertex Cover问题
- 关于接口隔离原则的一个实现
- 如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站
- apache vhost设置
- 流程图