• 测试 java反射Reflection中 获取 类属性、方法、构造方法及 调用类方法改变 对象属性


     1 package com.li.test;
     2 /**
     3  * 实体类User
     4  * @author Administrator
     5  */
     6 public class User {
     7     
     8     /**
     9      * name
    10      */
    11     private String name;//name
    12     private int age;//age
    13 
    14     public User() {
    15     }
    16     public User(String name,int age) {
    17         this.name = name;
    18         this.age = age;
    19     }
    20 
    21     public String getName() {
    22         return name;
    23     }
    24 
    25     public void setName(String name) {
    26         this.name = name;
    27     }
    28 
    29     public int getAge() {
    30         return age;
    31     }
    32 
    33     public void setAge(int age) {
    34         this.age = age;
    35     }
    36 }
     1 package com.li.test;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.Field;
     5 import java.lang.reflect.InvocationTargetException;
     6 import java.lang.reflect.Method;
     7 
     8 /**
     9  * 测试 java反射Reflection中 获取 类属性、方法、构造方法及 调用类方法改变 对象属性
    10  * 
    11  * @author Administrator
    12  * 
    13  */
    14 public class TestReflect {
    15 
    16     /**
    17      * @param args
    18      */
    19     public static void main(String[] args) {
    20         // 获取 类属性
    21         Field[] field = User.class.getDeclaredFields();
    22         System.out.println("User类属性----begin-----");
    23         for (int i = 0; i < field.length; i++) {
    24             System.out.println(field[i].getName());
    25         }
    26         System.out.println("User类属性----end-----");
    27         // 获取 类方法
    28         Method method[] = User.class.getDeclaredMethods();
    29         System.out.println("User类方法----begin-----");
    30         for (int i = 0; i < method.length; i++) {
    31             System.out.println(method[i].getName());
    32         }
    33         System.out.println("User类方法----end-----");
    34         // 获取 构造方法
    35         Constructor constructor[] = User.class.getDeclaredConstructors();
    36         System.out.println("User类构造方法----begin-----");
    37         for (int i = 0; i < constructor.length; i++) {
    38             System.out.println(constructor[i]);
    39         }
    40         System.out.println("User类构造方法----end-----");
    41         // 改变属性值
    42         User user1 = new User("A", 1);
    43         System.out.println("begin " + user1.getName() + user1.getAge());
    44         Field fieldName = null;
    45         try {
    46             fieldName = User.class.getDeclaredField("name");
    47         } catch (SecurityException e1) {
    48             // TODO Auto-generated catch block
    49             e1.printStackTrace();
    50         } catch (NoSuchFieldException e1) {
    51             // TODO Auto-generated catch block
    52             e1.printStackTrace();
    53         }
    54         Method setNameMethod = null;
    55         Method getNameMethod = null;
    56         Object name = null;
    57         try {
    58             setNameMethod = user1.getClass().getDeclaredMethod("setName",new Class[]{fieldName.getType()});
    59             getNameMethod = user1.getClass().getDeclaredMethod("getName",new Class[]{});
    60         } catch (SecurityException e) {
    61             e.printStackTrace();
    62         } catch (NoSuchMethodException e) {
    63             e.printStackTrace();
    64         }
    65         try {
    66             setNameMethod.invoke(user1, new Object[]{"B"});
    67             name = getNameMethod.invoke(user1, new Class[]{});
    68             
    69         } catch (IllegalArgumentException e) {
    70             // TODO Auto-generated catch block
    71             e.printStackTrace();
    72         } catch (IllegalAccessException e) {
    73             // TODO Auto-generated catch block
    74             e.printStackTrace();
    75         } catch (InvocationTargetException e) {
    76             // TODO Auto-generated catch block
    77             e.printStackTrace();
    78         }
    79 
    80         System.out.println("end " + user1.getName() + user1.getAge());
    81         System.out.println("end " + (String)name);
    82     }
    83 
    84 }

    以下是控制台输出:

    User类属性----begin-----
    name
    age
    User类属性----end-----
    User类方法----begin-----
    getAge
    setAge
    getName
    setName
    User类方法----end-----
    User类构造方法----begin-----
    public com.li.test.User()
    public com.li.test.User(java.lang.String,int)
    User类构造方法----end-----
    begin A1
    end B1
    end B

  • 相关阅读:
    序列化和反序列化(2)[Serializable] 转
    http错误列表(转)
    公共Webservice
    序列化和反序列化(1)[Serializable]
    序列化中的[NonSerialized]字段 转
    后台调用前台js
    http的请求和响应过程2
    命名规则
    tsql LastIndexOf
    js产生随机数
  • 原文地址:https://www.cnblogs.com/haha12/p/2762865.html
Copyright © 2020-2023  润新知