反 射 2----JAVA

本文深入解析Java反射机制,包括如何使用反射获取类属性、构造器和方法,动态创建对象及调用方法。重点介绍了如何利用反射破坏封装,访问私有属性,并提供了具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.4反射调用类中属性Field(描述类中普通属性)

 

  1. 第一组(父类中)-取得类中全部属性:

A.public Field[]getFields()throws SecurityException

B.public Field[]getDeclaredFields()  throws SecurityException

 

  1. 第一组(父类中)-取得类中指定名称属性:

A.public Field getField(String name)

throwsNoSuchFieldException, SecurityException

B.public Field getDeclaredField  (String name)

throwsNoSuchFieldException, SecurityException:可以取得类中全部普通属性,包含私有属性

Field类提供设置与取得属性方法

 设置属性:

public void set(Object obj, Object value)

 取得属性:

 public Object get(Object obj)

 

取得属性的类型:

Public Class<?> getType()

上代码:

import java.lang.reflect.Field;
import java.util.Date;
class Person{
    public int age;
}
public class wl {
    public static void main(String[] args) throws Exception {
        Class<Person> cls= Person.class;
        //1.取得Filed对象
        Field field=cls.getField ("age");
        //2.取得Person 实例化对象
        Person per=cls.newInstance ();
        //3.set&get
        field.set (per,18);
        System.out.println (field.get (per));
        System.out.println (field.getType ());


    }
}

结果:

 18

int

 

Process finished with exit code 0

 

 

2.5动态破坏封装:(反射的特性)

Constructor,Field,Method类都是AccessibleObject子类

 

AccessibleObject提供动态设置封装方法(在本次JVM进程中有效且只能通过反射调用)

public void setAccessible(boolean flag) throws SecurityException

setAccessible(ture)动态破坏封装:在一次JVM进程中仅能通过反射调用

 


import java.lang.reflect.Field;

class Person{
    private int age;
}
public class wl {
    public static void main(String[] args) throws Exception {
        Class<Person> cls= Person.class;
        //1.取得Filed对象
        Field field=cls.getDeclaredField ("age");
        //2.取得Person 实例化对象
        Person per=cls.newInstance ();
        //3.set&get
        field.setAccessible (true);
        field.set (per,18);
        System.out.println (field.get (per));
        System.out.println (field.getType ());


    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值