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反射] 


  • 相关阅读:
    Spring Cloud微服务实战 打造企业级优惠券系统 7-2 优惠券模块实体类相关列值枚举定义
    Spring Cloud微服务实战 打造企业级优惠券系统 7-1 创建优惠券模块微服务
    阿里云 oss (一) 工具上传图片
    Gateway 过滤器,过滤器统一异常处理
    GatewayFilterFactory 不生
    docker 安装 redis
    json 时区问题
    小程序checkbox
    小程序拍照功能
    Learning sensorimotor control with neuromorphic sensors: Toward hyperdimensional active perception
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6776459.html
Copyright © 2011-2022 走看看