• Java反射学习-2


     1 package cn.tx.reflect;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.Field;
     5 import java.lang.reflect.Method;
     6 import java.util.Arrays;
     7 /**
     8  * 二、获取一个类的Class对象的三种方式:
     9         (1)知道类的全路径名:Class<?> clazz = Class.forName("类的全路径名");
    10         (2)知道类的名字:  Class<?> clazz = 类名.class;
    11         (3)知道该类的一个对象 :  Class<?> clazz = 对象名.getClass();
    12  * @author Administrator
    13  *
    14  */
    15 public class ReflectLearn2 {
    16     
    17     private static String className = "java.lang.String";
    18     public static void main(String[] args) throws Exception {
    19         
    20         //根据类的名字获取类的Class对象
    21         getClazzByClassName();
    22         //根据对象获取Class对象,反射获取类的方法,属性,构造器
    23         getCalzzByObject(new Person());
    24     }
    25     
    26     public static void getClazzByClassName(){
    27         Class<?> clazz = Person.class;//类名.class获取类的Class对象
    28         Method[] methods = clazz.getDeclaredMethods();
    29         for (Method m : methods) {
    30             System.out.println(m);
    31         }
    32     }
    33     
    34     /**
    35      * 根据类的对象获取Class对象
    36      * @param obj
    37      */
    38     public static void getCalzzByObject(Object obj){
    39         //Class<? extends Object>表示通过反射获取的对象的类型不确定,但是一定是Object类的子类
    40         //等价于Class<?> clazz = obj.getClass();
    41         Class<? extends Object> clazz = obj.getClass();
    42         // 2.获得传递过来的类(上面的String类)的所有方法——目的就是为了调用获得的方法
    43         System.out.println("----------------获取类的所有声明的方法-------------------");
    44         Method[] methods = clazz.getDeclaredMethods();
    45         for (Method m : methods) {
    46             System.out.println(m);
    47         }
    48 
    49         // 3.获得类的所有声明的属性——目的:设置属性或者是获取属性值
    50         System.out.println("-------------获得类的所有声明的属性---------------");
    51         Field[] fields = clazz.getDeclaredFields();
    52         for (Field field : fields) {
    53             System.out.println(field);
    54         }
    55 
    56         // 4.获得类的所有构造器——创建对象
    57         System.out.println("--------------获得类的所有构造器-----------------");
    58         Constructor<?>[] constructors = clazz.getDeclaredConstructors();
    59         for (Constructor<?> constructor : constructors) {
    60             System.out.println(constructor);
    61         }
    62     }
    63 
    64 }
    65 /*    getCalzzByObject(new Person());打印结果如下
    66  *     ----------获取Person类的信息-------------
    67     public java.lang.String cn.tx.Person.toString()
    68     public java.lang.String cn.tx.Person.getAddress()
    69     public java.lang.String cn.tx.Person.getName()
    70     public java.lang.Integer cn.tx.Person.getId()
    71     public void cn.tx.Person.setName(java.lang.String)
    72     public void cn.tx.Person.setId(java.lang.Integer)
    73     public void cn.tx.Person.setAddress(java.lang.String)
    74     -------------获得类的所有声明的属性---------------
    75     private java.lang.Integer cn.tx.Person.id
    76     private java.lang.String cn.tx.Person.name
    77     private java.lang.String cn.tx.Person.address
    78     --------------获得类的所有构造器--------------
    79     public cn.tx.Person()
    80     public cn.tx.Person(java.lang.Integer,java.lang.String,java.lang.String)
    81  * */
  • 相关阅读:
    /、./和../的区别
    【Java基础】-- FileUtils工具类常用方法
    【数据库】-- MySQL中比like更高效的三个写法
    【Java框架】-- SpringBoot大文件RestTemplate下载解决方案
    记一次gitlab代码仓清空还原复盘
    聊聊如何实现一个带有拦截器功能的SPI
    聊聊如何实现一个支持键值对的SPI
    类实例对象的class类型却不属于该类,何解?
    exe打包成安装文件(界面美观)
    linux系统软件启动sh脚本
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/9135536.html
Copyright © 2020-2023  润新知