Java框架 反射

本文详细介绍了Java反射机制,包括如何在运行时获取类信息、创建对象、访问公共和私有成员,以及获取和调用方法。通过实例展示了Class对象的创建和使用,以及不同类型字段和方法的访问方法。
摘要由CSDN通过智能技术生成

反射 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。

反射的作用

在运行时判断任意一个对象所属的类;

在运行时创建任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);

在运行时调用任意一个对象的方法。

反射的使用

1.创建Class对象

步骤1 获取class实例

获取class的3种方法

public static void main1( String[] args) throws ClassNotFoundException{
//1.没有对象的情况
Class<?> aClass1 = Class.forName("com.Person");
}

 有很多异常问题需要向外抛出(throws) 下面的方法也同样需要抛出不一样的问题

//2.有对象的情况
Person person1 = aClass3.newInstance();
System.out.println(person1);
//3.已知类的情况
Class<Person> aClass3 = Person.class;

步骤2 生成实例对象

有两种方法

// 方法一
Person person1 = aClass3.newInstance();
System.out.println(person1);
//方法二
Constructor<Person> constructor = aClass3.getConstructor(Integer.class,String.class);
Person person2 = constructor.newInstance(1,"zs");
System.out.println(person2);

2.访问属性

获取全部公有成员 Fields 

public static void main2(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Class<Person> personClass = Person.class;
        Constructor<Person> constructor = personClass.getConstructor(Integer.class, String.class);
        Person person = constructor.newInstance(1, "zs");
        /**获取全部公有成员*/
        Field[] fields = personClass.getFields();
        for (Field field: fields) {
            /**获取值*/
            Object o = field.get(person);
            System.out.print(o + "-");
            /**获取field对象两位成员的名字*/
            String name = field.getName();
            System.out.println(name);
        }

获取全部私有成员 DeclaredFields

        Field[] declaredFields = personClass.getDeclaredFields();
        for (Field declaredField: declaredFields) {
            declaredField.setAccessible(true);
            Object o = declaredField.get(person);
            System.out.println(o);
        }

获取单个私有成员 DeclaredField

        Field idField = personClass.getDeclaredField("id");
        idField.setAccessible(true);
        Object o = idField.get(person);
        System.out.println(o);

3.访问方法

获取全部方法名

public static void main(String[] args){
    Class<Person> personClass = Person.class;
    Method[] methods = personClass.getMethods();
    /**获取全部方法名 */
    for (Method method: methods) {
        String name = method.getName();
        System.out.println(name);
    }
}

 获取指定下标方法名

    String name =methods[2].getName();
    System.out.println(name);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值