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

  • 相关阅读:
    【Python爬虫】:爬取干货集中营上的全部美女妹子(翻页处理)
    python进阶之py文件内置属性
    Delphi
    Goland debug 报错:could not launch process: decoding dwarf section info at offset 0x0: too short
    Goland 生成可执行文件
    代理加速配置详解
    关掉所有代码折叠folding
    前端工程化概述(转发)
    Reactjs —— 前端框架切换
    TODO——多线程
  • 原文地址:https://www.cnblogs.com/mingluosunshan/p/3214016.html
Copyright © 2011-2022 走看看