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   :  <description>
*/
 
/* Updation record 1:
 * Updation date        :  2014-10-25
 * Updator          :  Qiuzhenping
 * Trace No:  <Trace No>
 * Updation No:  <Updation No>
 * Updation Content:  <List all contents of updation and all methods updated.>
 */
package com.qiuzhping.reflect.main;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
/**
 * <Description functions in a word>
 * 反射就是把Java类中的各种成分映射成对应的Java类。
 * <Detail description>
 * 
 * @author  Qiuzhenping
 * @version  [Version NO, 2014-10-25]
 * @see  [Related classes/methods]
 * @since  [product/module version]
 */
public class ReflectTestMain {
 
         /** <default constructor>
          */
         public ReflectTestMain() {
                   // TODO Auto-generated constructor stub
         }
 
         /** <Description functions in a word>
          * 2014-10-25
          * <Detail description>
          * @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());
         }
 
         /** <Description functions in a word>
          *  将obj对象中的String类型的字段相应的Value中含有i的字符替换为abc<BR>
          *  2014-10-26
          * <Detail description>
          * @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 id;
                   private String pwd;
                   public int getAge() {
                            return age;
                   }
                   public void setAge(int age) {
                            this.age = age;
                   }
                   public String getName() {
                            return name;
                   }
                   public void setName(String name) {
                            this.name = name;
                   }
                   public String getId() {
                            return id;
                   }
                   public void setId(String id) {
                            this.id = id;
                   }
                   public String getPwd() {
                            return pwd;
                   }
                   public void setPwd(String pwd) {
                            this.pwd = pwd;
                   }
                   /** <default constructor>
                    */
                   public Person() {
                            // TODO Auto-generated constructor stub
                   }
 
         }
}

 


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   :  <description>
*/
 
/* Updation record 1:
 * Updation date        :  2014-10-25
 * Updator          :  Qiuzhenping
 * Trace No:  <Trace No>
 * Updation No:  <Updation No>
 * Updation Content:  <List all contents of updation and all methods updated.>
 */
package com.qiuzhping.reflect.main;
 
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
 
/**
 * <Description functions in a word>
 * 反射就是把Java类中的各种成分映射成对应的Java类。
 * <Detail description>
 * 
 * @author  Qiuzhenping
 * @version  [Version NO, 2014-10-25]
 * @see  [Related classes/methods]
 * @since  [product/module version]
 */
public class ReflectTestMain {
 
         /** <default constructor>
          */
         public ReflectTestMain() {
                   // TODO Auto-generated constructor stub
         }
 
         /** <Description functions in a word>
          * 2014-10-25
          * <Detail description>
          * @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());
         }
 
         /** <Description functions in a word>
          *  将obj对象中的String类型的字段相应的Value中含有i的字符替换为abc<BR>
          *  2014-10-26
          * <Detail description>
          * @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 id;
                   private String pwd;
                   public int getAge() {
                            return age;
                   }
                   public void setAge(int age) {
                            this.age = age;
                   }
                   public String getName() {
                            return name;
                   }
                   public void setName(String name) {
                            this.name = name;
                   }
                   public String getId() {
                            return id;
                   }
                   public void setId(String id) {
                            this.id = id;
                   }
                   public String getPwd() {
                            return pwd;
                   }
                   public void setPwd(String pwd) {
                            this.pwd = pwd;
                   }
                   /** <default constructor>
                    */
                   public Person() {
                            // TODO Auto-generated constructor stub
                   }
 
         }
}