zoukankan      html  css  js  c++  java
  • Java反射学习-1

    新建一个Person类

     1 package cn.tx.reflect;
     2 
     3 /**
     4  * 注解初步了解
     5  * @author Administrator
     6  *
     7  */
     8 public class Person {
     9     private Integer id;
    10     private String name;
    11     private String address;
    12     
    13     
    14     public Person() {
    15         super();
    16     }
    17     
    18     public Person(Integer id, String name, String address) {
    19         super();
    20         this.id = id;
    21         this.name = name;
    22         this.address = address;
    23     }
    24 
    25     public String getName() {
    26         return name;
    27     }
    28     public Integer getId() {
    29         return id;
    30     }
    31     public void setId(Integer id) {
    32         this.id = id;
    33     }
    34     public void setName(String name) {
    35         this.name = name;
    36     }
    37     public String getAddress() {
    38         return address;
    39     }
    40     public void setAddress(String address) {
    41         this.address = address;
    42     }
    43     
    44     public static void printInfo(){
    45         System.out.println("静态方法反射调用");
    46     }
    47 
    48     @Override
    49     public String toString() {
    50         return "Person [address=" + address + ", id=" + id + ", name=" + name
    51                 + "]";
    52     }
    53     
    54 
    55 }
      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  * 一、反射获取类的属性,方法,构造器
      9  * @author Administrator
     10  *
     11  */
     12 public class ReflectLearn1 {
     13     
     14     private static String className = "java.lang.String";
     15     public static void main(String[] args) throws Exception {
     16         // <?>中的问号为泛型,表示不知道后面list对象 中存放的实际类型是什么,用?表示
     17         // List<?> list = new ArrayList();
     18 
     19         // 1.根据一个类的全路径名获取一个类的类对象:Class对象
     20         
     21         Class<?> clazz = Class.forName(className);
     22 
     23         // 2.获得传递过来的类(上面的String类)的所有声明方法——目的就是为了调用获得的方法
     24         Method[] methods = clazz.getDeclaredMethods();
     25         for (Method m : methods) {
     26             System.out.println(m);
     27         }
     28 
     29         // 3.获得类的所有声明的属性——目的:设置属性或者是获取属性值,或者是获取属性上的注解!
     30         System.out.println("-------------获得类的所有声明的属性---------------");
     31         Field[] fields = clazz.getDeclaredFields();
     32         for (Field field : fields) {
     33             System.out.println(field);
     34         }
     35 
     36         // 4.获得类的所有构造器——创建对象
     37         System.out.println("--------------获得类的所有构造器--------------");
     38         Constructor<?>[] constructors = clazz.getDeclaredConstructors();
     39         for (Constructor<?> constructor : constructors) {
     40             System.out.println(constructor);
     41         }
     42         
     43         //5.获取一个类的Class对象的三种方式:
     44         //(1)知道类的全路径名,Class<?> clazz = Class.forName("类的全路径名");
     45         //(2)知道该类的一个对象   Class<?> clazz = 对象名.getClass();
     46         //(3)知道类的名字: Class<?> clazz = 类名.class;
     47         System.out.println("----------获取Person类的信息-------------");
     48         Person p = new Person();
     49         test(p);
     50         /*    test(p);打印结果如下
     51          *     ----------获取Person类的信息-------------
     52             public java.lang.String cn.tx.Person.toString()
     53             public java.lang.String cn.tx.Person.getAddress()
     54             public java.lang.String cn.tx.Person.getName()
     55             public java.lang.Integer cn.tx.Person.getId()
     56             public void cn.tx.Person.setName(java.lang.String)
     57             public void cn.tx.Person.setId(java.lang.Integer)
     58             public void cn.tx.Person.setAddress(java.lang.String)
     59             -------------获得类的所有声明的属性---------------
     60             private java.lang.Integer cn.tx.Person.id
     61             private java.lang.String cn.tx.Person.name
     62             private java.lang.String cn.tx.Person.address
     63             --------------获得类的所有构造器--------------
     64             public cn.tx.Person()
     65             public cn.tx.Person(java.lang.Integer,java.lang.String,java.lang.String)
     66          * */
     67         //(3)
     68         
     69 
     70     }
     71     
     72     /**
     73      * Class<? extends Object> 
     74      * @param obj
     75      */
     76     public static void test(Object obj){
     77         //Class<? extends Object>表示通过反射获取的对象的类型不确定,但是一定是Object类的子类
     78         //等价于Class<?> clazz = obj.getClass();
     79         Class<? extends Object> clazz = obj.getClass();
     80         // 2.获得传递过来的类(上面的String类)的所有方法——目的就是为了调用获得的方法
     81         Method[] methods = clazz.getDeclaredMethods();
     82         for (Method m : methods) {
     83             System.out.println(m);
     84         }
     85 
     86         // 3.获得类的所有声明的属性——目的:设置属性或者是获取属性值
     87         System.out.println("-------------获得类的所有声明的属性---------------");
     88         Field[] fields = clazz.getDeclaredFields();
     89         for (Field field : fields) {
     90             System.out.println(field);
     91         }
     92 
     93         // 4.获得类的所有构造器——创建对象
     94         System.out.println("--------------获得类的所有构造器--------------");
     95         Constructor<?>[] constructors = clazz.getDeclaredConstructors();
     96         for (Constructor<?> constructor : constructors) {
     97             System.out.println(constructor);
     98         }
     99     }
    100 
    101 }
  • 相关阅读:
    oracle补丁升级
    Vmware虚拟机设置静态IP地址
    VMware 虚拟机安装
    中国城市json
    安装vue
    中国省份城市数据
    ajax表单提交post(错误400) 序列化表单(post表单转换json(序列化))
    自动搭建ssm项目
    小米root
    程序员职业规划(一篇来自"阿里Java工程师"对工作3年左右程序员的职业建议和应该掌握的职业技能)
  • 原文地址:https://www.cnblogs.com/enjoyjava/p/9135524.html
Copyright © 2011-2022 走看看