zoukankan      html  css  js  c++  java
  • 二、反射机制动态操作方法_ 属性_构造器

     

     

     

     

     1 public class User {
     2     //类的属性
     3     //public int userId;
     4     private int userId;
     5     private String userName;
     6     private String password;
     7     //公有的取值,赋值方法
     8     public int getUserId() {
     9         return userId;
    10     }
    11     public void setUserId(int userId) {
    12         this.userId = userId;
    13     }
    14     public String getUserName() {
    15         return userName;
    16     }
    17     public void setUserName(String userName) {
    18         this.userName = userName;
    19     }
    20     public String getPassword() {
    21         return password;
    22     }
    23     public void setPassword(String password) {
    24         this.password = password;
    25     }
    26     //构造方法
    27     public User() {
    28         // TODO Auto-generated constructor stub
    29     }
    30     public User(int userId, String userName, String password) {
    31         super();
    32         this.userId = userId;
    33         this.userName = userName;
    34         this.password = password;
    35     }
    36     
    37     
    38 }
     1 public class Test1 {
     2     public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
     3         String path = "fanshe.User";
     4         //(1)获取类的名称
     5         Class c = Class.forName(path);
     6         System.out.println("(1)获取类的名称");
     7         System.out.println("类的全名称:"+c.getName());  //fanshe.User
     8         System.out.print("类的名称:"+c.getSimpleName());   //User
     9         System.out.println("
    --------------------------");
    10 
    11         //获取父类的Class对象
    12         Class csuper = c.getSuperclass();
    13         System.out.println("获取父类的Class对象");
    14         System.out.println("类的全名称:"+csuper.getName());   //java.lang.Object
    15         System.out.print("类的名称:"+csuper.getSimpleName());    //Object
    16         System.out.println("
    --------------------------");
    17 
    18         //(2)获取类的属性信息
    19         //Field f=c.getField("userId"); //只能获取公共的属性
    20         //System.out.println(f);
    21         System.out.println("获取类的属性信息");
    22         Field [] fields=c.getFields(); //只能获取公共的属性
    23         System.out.println(fields.length);    //0
    24 
    25         Field [] fields2 = c.getDeclaredFields();
    26         System.out.println(fields2.length);  //3
    27         for (Field field : fields2){
    28             //System.out.println(field);//调用了toString()方法
    29             System.out.println(field.getModifiers()+"	"+field.getType()+"	"+field.getName());  //field.getModifiers():访问权限,2代表private
    30         }
    31 
    32 
    33         //(3)获取类的方法信息
    34         System.out.println("(3)获取类的方法信息");
    35         Method[] methods = c.getDeclaredMethods();//本类中的公共的方法对象
    36         //System.out.println(methods.length);  //6
    37         for(Method method:methods){
    38             //System.out.println(method);
    39             System.out.println("访问权限"+method.getModifiers());
    40             System.out.println("返回值类型:"+method.getReturnType());
    41             System.out.println("方法的名称:"+method.getName());
    42             //获取方法的参数
    43             System.out.println("//获取方法的参数");
    44             Class [] cPara=method.getParameterTypes();
    45             for (Class c1 : cPara) {
    46                 System.out.println(c1.getTypeName()+"	");
    47             }
    48             System.out.println("
    --------------------------");
    49         }
    50         System.out.println("
    =============================
    ");
    51 
    52 
    53         //(4)获取类的构造器
    54         System.out.println("(4)获取类的构造器");
    55         Constructor [] cons=c.getConstructors();
    56         for (Constructor constructor : cons) {
    57             System.out.println(constructor);
    58         }
    59         System.out.println("
    =====================");
    60         //获取指定的构造方法
    61         System.out.println("获取指定的构造方法");
    62         Constructor con=c.getConstructor(null);
    63         System.out.println(con);
    64         System.out.println("
    =====================");
    65         Constructor con2=c.getConstructor(int.class,String.class,String.class);
    66         System.out.println(con2);
    67     }
    68 }

    2.5 动态的操作属性、方法、构造方法

     1 public class Test2 {
     2     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
     3         //获到Class类的对象
     4         Class c=Class.forName("com.bjsxt.entity.User");
     5         
     6         //(1)得到无参构造方法的对象
     7         Constructor cons=c.getConstructor(null);
     8         //通过无参构造方法的对象,创建User类的对象
     9         User user=(User) cons.newInstance();
    10         
    11         //(2)动态操作属性
    12         Field field=c.getDeclaredField("userId");
    13         field.setAccessible(true);//这个属性不需要做安全检查了,可以直接访问
    14         field.set(user, 1001);  //通过反射直接赋值
    15         System.out.println("取出userId这个属性的值:"+field.get(user));//通过反射直接取值
    16         
    17         //(3)动态操作方法
    18         Method m=c.getDeclaredMethod("setUserName", String.class);
    19         //执行setUserName这个方法
    20         m.invoke(user, "张三");
    21         Method m2=c.getDeclaredMethod("getUserName", null);
    22         System.out.println(m2.invoke(user));
    23     }
    24 }

  • 相关阅读:
    c#——树的深度,广度优先遍历与迭代器(IEnumerable<T>)的结合使用
    弱网下移动端网络连接处理策略
    弱网络环境下最优调度和优化传输层协议方案
    Wpf ToolTip 绑订
    minio配置
    使用本机映像优化 NET 桌面应用
    Linux内核内存管理:系统内存布局-内核空间和用户空间
    mysql 的 limit 与sql server 的 top n
    win 10 遇到某文件一直在占用导致无法关闭,或者去任务管理器找不到服务怎么办?具体解决
    sql server
  • 原文地址:https://www.cnblogs.com/qiaoxin11/p/12706519.html
Copyright © 2011-2022 走看看