zoukankan      html  css  js  c++  java
  • Java 反射机制[Field反射]

    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   :  <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 +" name = "+name+" id = "+id+" pwd = "+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

                       }

             }

    }

    Java 反射机制[Method反射] 


  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6776459.html
Copyright © 2011-2022 走看看