反射 API基本代码测试

ReflectBean.java

package com.xiaojian.basics.reflect;

/**
 * 使用反射的测试类
 */

public class ReflectBean {

// field
    public String name;
    private int age;
    protected char gender;

// constructor
    public ReflectBean() {
        this.name = "无参";
        this.age = 1;
        this.gender = ‘男‘;
    }

    public ReflectBean(String name,Integer age){
        this.name = name;
        this.age = age;
    }

// method
    protected String getInfo(){

        String info = "这个" + this.gender + "人的名字是" + this.name ;
        return info;
    }

    private int getAge(){
        return this.age;
    }

    @Override
    public String toString() {
        return "ReflectBean{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ", gender=" + gender +
                ‘}‘;
    }
}
Test.java
package com.xiaojian.basics.reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 反射
 */
public class Test {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
        Class clazz = Class.forName("com.xiaojian.basics.reflect.ReflectBean");

        // getFields()获取属性:只能获取public访问权限的
        Field[] fields = clazz.getFields();
        // getMethods()获取所有显性方法:只能获取public访问权限的
        Method[] methods = clazz.getMethods();
        // 获取所有显性构造器
        Constructor[] constructors = clazz.getConstructors();
        // 创建空构造函数对象
        ReflectBean bean1 = (ReflectBean) clazz.newInstance();
        System.out.println("***************无参构造函数***********************");
        System.out.println(bean1.getInfo());

        // 创建有参数构造函数
        Constructor constructor = clazz.getConstructor(String.class,Integer.class);
        ReflectBean bean2 = (ReflectBean)constructor.newInstance("小华",125);
        System.out.println("***************有参构造函数***********************");
        System.out.println(bean2.toString());


        // 输出所有显性属性名称
        System.out.println("***************属性名称***********************");
        for(Field field : fields){
            System.out.println(field.getName());
        }
        // 输出所有显性方法名称
        System.out.println("***************方法名称************************");
        for(Method method : methods){
            System.out.println(method.getName());
        }
        System.out.println("///////////////////////////////////////////////////////////////////////////////////////////////// ");


        // getDeclaredFields()获取所有属性
        Field[] declaredFields = clazz.getDeclaredFields();
        // getDeclaredMethods()获取所有方法
        Method[] decalredMethods = clazz.getDeclaredMethods();


        // 输出所有属性名称
        System.out.println("***************所有属性名称***********************");
        for(Field field : declaredFields){
            System.out.println(field.getName());
        }
        // 输出所有方法名称
        System.out.println("***************所有方法名称************************");
        for(Method method : decalredMethods){
            System.out.println(method.getName());
        }


    }

}

反射 API基本代码测试

上一篇:windows通过cmd命令行使用sftp上传文件至linux


下一篇:Objective-c nil, Nil, NULL和NSNull的区别