java在反射时候经常用到了 Field 类。

  我认为代码是最好的解释,直接上代码。

  首先,用到了一个bean类,源代码如下:

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;  
    }  
      
}  

  我这里说道的Field是由反射的开始,源代码如下:

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;  
  
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);  
          

  
    }  
}  

  这样就利用了Field很块的完成了任务。ok..........

java Field 二三事的更多相关文章

  1. Java并发编程二三事

    Java并发编程二三事 转自我的Github 近日重新翻了一下<Java Concurrency in Practice>故以此文记之. 我觉得Java的并发可以从下面三个点去理解: * ...

  2. Java中的匿名内部类及内部类的二三事

    匿名内部类适合创建那些只需要使用一次的类,它的语法有些奇怪,创建匿名内部类会立即创建一个该类的实例,这个类定义立即消失,且不能重复使用. 定义匿名类的格式如下: new 实现接口() |父类构造器(实 ...

  3. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  4. 一只代码小白git托管路上的二三事

    [经验]一只代码小白git托管路上的二三事 写在前面的话 寒假的时候,娄老师给我们布置了代码托管的作业,并要求把托管地址发给学委.因假期的时候没有带电脑回家,所以只是在手机上草草注册了,也稀里糊涂就将 ...

  5. Java EE : 二、图解 Cookie(小甜饼)

    目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.概述 二.详细介绍Cookie 传输 ...

  6. 利用JAVA生成二维码

    本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...

  7. java实现二维码

    说起二维码,微信好像最先启用,随后各类二维码就开始流行起来了.那什么是二维码呢. 1.什么是二维码?百度一下即可 http://baike.baidu.com/view/132241.htm?fr=a ...

  8. linux杂记(十二?) 关于账号和密码的二三事

    关于密码的二三事 关于账号和密码的二三事 久了不更linux的相关知识,实在是懒得想内容点(纯粹是懒).那么今天就来谈谈关于linux密码和账号的重要概念. 假如你的主机遭到入侵,那么对方的第一个侵入 ...

  9. Java 设计模式(二)-六大原则

    Java 设计模式(二)-六大原则 单一职责原则(Single Responsibility Principle) 定义: 不要存在多余一个原因导致类变更,既一个类只负责一项职责. 问题由来: 当类A ...

随机推荐

  1. BZOJ.2134.[国家集训队]单选错位(概率 递推)

    题目链接 如题目中的公式,我们只要把做对每个题的概率加起来就可以了(乘个1就是期望). 做对第i道题的概率 \[P_i=\frac{1}{max(a_{i-1},a_i)}\] 原式是 \(P_i=\ ...

  2. 工具使用-----Jmeter-脚本的录制

    //转载  http://www.cnblogs.com/fnng/archive/2011/08/20/2147082.html 以下是我自己录制的关于这篇文章的视频,有兴趣的可以下载哦 https ...

  3. BZOJ 1009 HNOI 2008 GT考试 递推+矩乘

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3679  Solved: 2254[Submit][Statu ...

  4. 喵哈哈村的魔法考试 Round #7 (Div.2) 题解

    喵哈哈村的魔法考试 Round #7 (Div.2) 注意!后四道题来自于周日的hihocoder offer收割赛第九场. 我建了个群:欢迎加入qscoj交流群,群号码:540667432 大概作为 ...

  5. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem F. Finance 模拟题

    Problem F. Finance 题目连接: http://codeforces.com/gym/100714 Description The Big Boss Company (BBC) pri ...

  6. API网关的设计思路及落地 IT大咖说 - 大咖干货,不再错过

    API网关的设计思路及落地 IT大咖说 - 大咖干货,不再错过   http://www.itdks.com/dakashuo/new/dakalive/detail/1407

  7. STM32F4 HAL Composite USB Device Example : CDC + MSC

    STM32F4 USB Composite CDC + MSC I'm in the process of building a USB composite CDC + MSC device on t ...

  8. [Win32]获取指定进程的父进程PID

    // // #include <Windows.h> #include <winnt.h> #include <winternl.h> typedef NTSTAT ...

  9. Android 数据存储01之SharedPreferences

    Android 数据存储01之SharedPreferences 版本 修改内容 日期 修改人 V1.0 原始版本 2013/2/20 skywang 1 SharedPreferences概括 Sh ...

  10. 三张图让你高速明确activity与fragment生命周期的异同点

    第一张图:activity的生命周期 第二张图:fragment的生命周期 第三张图:activity与fragment生命周期对照 补充:假设你还是不明确,请翻译一下你不理解的相应单词. ----- ...