zoukankan      html  css  js  c++  java
  • 反射机制(二)

    通过Class类取得完整结构

    1 package com.fwj.classdemo;
    2 
    3 public interface IStudent {
    4 
    5     public static final String AUTHOR = "fwj";
    6     public String getInfo();
    7     public void sayHello();
    8     
    9 }
     1 package com.fwj.classdemo;
     2 
     3 public class Person implements IStudent{
     4 
     5     private String name;
     6     private int age;
     7     
     8     public Person(String name, int age) {
     9         super();
    10         this.name = name;
    11         this.age = age;
    12     }
    13 
    14     public Person() {
    15         super();
    16     }
    17 
    18     public Person(String name) {
    19         super();
    20         this.name = name;
    21     }
    22                   省略getter和setter。。。。
    23     @Override
    24     public String toString() {
    25         return "Person [name=" + name + ", age=" + age + "]";
    26     }
    27 
    28     @Override
    29     public String getInfo() {
    30         // TODO Auto-generated method stub
    31         return AUTHOR + name + age;
    32     }
    33 
    34     @Override
    35     public void sayHello() {
    36         // TODO Auto-generated method stub
    37         System.out.println("hello world!!!");
    38     }
    39 }

    取得继承的父类

    在Class中存在以下方法,可以取得一个类继承的父类
    public Class<? super T> getSuperclass()

     1 package com.fwj.classdemo;
     2 
     3 import java.lang.reflect.Constructor;
     4 
     5 public class PersonClassDemo {
     6 
     7     public static void main(String[] args) throws Exception{
     8         Class<?> c = null;
     9         Person p = null;
    10         c = Class.forName("com.fwj.classdemo.Person");//实例化Class对象
    11         System.out.println(c.getSuperclass().getName());
    12     }
    13 }

    运行结果:

    java.lang.Object

    取得实现的全部接口

    一个类可以实现多个接口,因此Class类中使用以下方法得到类实现的接口数组。
    public Class<?>[] getInterfaces()

     1 package com.fwj.classdemo;
     2 
     3 import java.lang.reflect.Constructor;
     4 
     5 public class PersonClassDemo {
     6 
     7     public static void main(String[] args) throws Exception{
     8         Class<?> c = null;
     9         Person p = null;
    10         c = Class.forName("com.fwj.classdemo.Person");//实例化Class对象
    11         Class<?> cs[] = c.getInterfaces();
    12         for (Class<?> cl : cs) {
    13             System.out.println(cl.getName());
    14         }
    15     }
    16 }

    运行结果:

    com.fwj.classdemo.IStudent

    取得到所有的构造方法

    Class类中使用以下方法得到所有的构造方法:
    public Constructor<?>[] getConstructors()
                                     throws SecurityException

    Constructor中使用以下方法得到构造方法的修饰符:
    public int getModifiers()

    以上方法的返回值是整数,这是由于每一个修饰符对应着一个整数,而且对于 public static final实际上是三个值相加的结果。
    如果想要得到一个整数对应的修饰符,则必须使用Modifer类进行还原。方法如下:
    public static String toString(int mod)

    Constructor中使用以下方法得到参数的类型:
    public Class<?>[] getParameterTypes()

    取得一个类中的全部方法

    Class类中的以下方法返回类中的所用方法:
    public Method[] getMethods()
                        throws SecurityException

    //Methods中的以下方法,用来得到方法的信息

    //取得方法的修饰符
    public int getModifiers()
    //取得方法的返回值
    public Class<?> getReturnType()
    //取得方法的全部参数
    public Class<?>[] getParameterTypes()
    //取得方法的抛出异常
    public Class<?>[] getExceptionTypes()
    //取得方法的方法名
    public String getName()

    取得一个类中的全部属性

    //得到继承而来的属性
    public Field[] getFields()
                      throws SecurityException
    //得到自己定义的属性
    public Field[] getDeclaredFields()
                              throws SecurityException

  • 相关阅读:
    Map集合
    Collections 工具类
    LinkedList 集合
    List集合
    Iterator迭代器
    Collection集合
    时间日期类
    一看就懂!速写docker 容器数据库备份脚本
    Nginx 配置之HTTPS和WSS那些你不知道的事!
    https 证书认证/颁发/秒级认证无烦恼
  • 原文地址:https://www.cnblogs.com/mingluosunshan/p/3214016.html
Copyright © 2011-2022 走看看