初识Java反射机制——Reflection(一)

在学了面向对象的语言Java之后,肯定会接触到对象的封装,类、属性、方法的修饰符public和private以及default,那接下来如果认识了java的反射机制,会更加深对类的封装的认识。

三种方式得到Class对象:
1.调用对象的getClass方法,返回该对象的Class对象
2.Class.forName(“类的名字”);
3.Class c=类名.class

首先,让我们来看看一个带有java反射操作的类 xingpd.java

/**
 * @author  xpd3581 
 * @date 2017-3-17 
 * @version 1.0
 */
package com.xingpd.code;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;

/*** xingpd 2017-3-17 ***/
public class xingpd {

    public static void main(String[] args) {
        try {

            Scanner sc = new Scanner(System.in);
            String className = sc.next();

            /** 根据类的全路径进行类加载,返回该类的Class对象 **/
            Class cla = Class.forName(className);

            /** 得到该类的内部类集合 **/
            Class[] cls = cla.getDeclaredClasses();

            /** 打印内部类信息 **/
            System.out.println("  ****  These are InnerClasses info:  ****");

            /** 遍历该类方法的集合 **/
            for (Class cl : cls) {

                /** 打印类名 **/
                System.out.println(cl.getName());

                for (Field f : cl.getDeclaredFields()) {
                    /** 打印属性修饰符 **/
                    System.out.print(Modifier.toString(f.getModifiers()) + " ");
                    /** 打印属性类型 **/
                    System.out.print(f.getType().getName() + " ");
                    /** 打印属性名称 **/
                    System.out.println(f.getName());
                }

                for (Method m : cl.getDeclaredMethods()) {
                    /** 打印方法修饰符 **/
                    System.out.print(Modifier.toString(m.getModifiers()) + " ");
                    /** 打印方法返回类型 **/
                    System.out.print(m.getReturnType().getName() + " ");
                    /** 打印方法名称 **/
                    System.out.println(m.getName());//
                }

            }
            System.out.println("  ****  These are methods info:  ****");

            /** 利用得到的Class对象的自审,返回方法对象集合 **/
            Method[] method = cla.getDeclaredMethods();

            /** 遍历该类方法的集合 **/
            for (Method me : method) {
                /** 打印方法信息 **/
                System.out.println(me.toString());
            }
            System.out.println("  ****  These are fields info:  ****  ");

            /** 利用得到的Class对象的自审,返回属性对象集合 **/
            Field[] field = cla.getDeclaredFields();
            /** 遍历该类属性的集合 **/
            for (Field f : field) {
                /** 打印属性信息 **/
                System.out.println(f.toString());
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

}

class MyUser {
    private String name = "guanyu";
    private int age = 25;

    public final String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public MyUser(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public MyUser() {
        super();
    }

    public void test(String str, int i) throws Exception {
    }
}

此类运行以后,效果如下:

初识Java反射机制——Reflection(一)_第1张图片

绿色字体是运行以后手动输入的类名。

你可能感兴趣的:(java)