设为首页 加入收藏

TOP

Java 反射机制[Field反射](一)
2014-11-23 19:23:06 来源: 作者: 【 】 浏览:59
Tags:Java 反射 机制 Field

1. 反射概念及功能


反射就是把Java类中的各种成分映射成相应的Java类。例如一个Java类中用一个Class类的对象来表示。一个类中的组成部分分为成员变量,方法,构造方法,包等等。


Java反射机制主要提供了以下功能: 判断在运行时任意一个对象所属的类;在运行时构造任意一个类的对象;判断在运行时任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。


2. Field反射


以下代码将obj对象中的String类型的字段对应的Value中含有i的字符替换为abc。通过这个简单的案例进行初步分析Java的反射机制。


Java Code


/*


* System Abbrev :


* system Name :


* Component No :


* Component Name:


* File name :ReflectTestMain.java


* Author :Qiuzhenping


* Date :2014-10-25


* Description :


*/



/* Updation record 1:


* Updation date : 2014-10-25


* Updator : Qiuzhenping


* Trace No:


* Updation No:


* Updation Content:


*/


package com.qiuzhping.reflect.main;



import java.lang.reflect.Constructor;


import java.lang.reflect.Field;


import java.lang.reflect.Method;



/**


*


* 反射就是把Java类中的各种成分映射成相应的Java类。


*


*


* @author Qiuzhenping


* @version [Version NO, 2014-10-25]


* @see [Related classes/methods]


* @since [product/module version]


*/


public class ReflectTestMain {



/**


*/


public ReflectTestMain() {


// TODO Auto-generated constructor stub


}



/**


* 2014-10-25


*


* @author Qiuzhenping


* @param args [Parameters description]


* @return void [Return type description]


* @exception throws [Exception] [Exception description]


* @see [Related classes#Related methods#Related properties]


*/


public static void main(String[] args) throws Exception{


// TODO Auto-generated method stub


//Constructor[] contructor = Person.class.getConstructors();


//Method[] method = Person.class.getMethods();


Person p = new Person(24, "Qiuzhping", "100001", "Qiuzhping");


// Field [] field = p.getClass().getDeclaredFields();


// for(Field f:field){


// f.setAccessible(true);


// System.out.println(f.getName());


// Object obj = f.get(p);


// System.out.println(obj);


// }


changeStringValue(p);


System.out.println(p.toString());


}



/**


* 将obj对象中的String类型的字段对应的Value中含有i的字符替换为abc


* 2014-10-26


*


* @author Qiuzhenping


* @param obj [Parameters description]


* @return void [Return type description]


* @exception throws [Exception] [Exception description]


* @see [Related classes#Related methods#Related properties]


*/


private static void changeStringValue(Object obj) throws Exception {


Field[] fields = obj.getClass().getDeclaredFields();


for(Field f : fields){


f.setAccessible(true);//暴力反射


if(f.getType() == String.class){//字节码比较是用 ==


String oldValue = (String) f.get(obj);


String newValue = oldValue.replaceAll("i", "abc");//将所有的i替换为abc


f.set(obj, newValue);


}


}



}



static class Person {



public Person(int age, String name, String id, String pwd) {


super();


this.age = age;


this.name = name;


this.id = id;


this.pwd = pwd;


}


@Override


public String toString() {


return "age = "+age +"\tname = "+name+"\tid = "+id+"\tpwd = "+pwd;


}


private int age;


private String name;


private String i

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android init.rc文件详细分析 下一篇C++引用的实质

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: