反射一:反射介绍和入门

1 反射介绍

  • 概念

反射是被视为动态语言的关键,反射机制允许程序在执行期间借助于反射的aPI取得任何类的内部信息,并能直接操作任意对象的内部属性和方法

在加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的结构信息,我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构

java是一门静态语言,就是因为有了反射才让java具有了动态性

java反射提供了哪些功能?

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类具有的成员变量和方法
  • 在运行时获取泛型信息
  • 在运行时调用任意一个对象的成员变量和方法
  • 在运行时处理注解
  • 动态代理

2 入门演示

package study.wyy.java.model;

public class Person {
    public String name;

    private Integer age;

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

比如有上面这么一个类,我们通常是是这样使用的

@Test
    public void test01(){
        Person kobe = new Person("kobe", 18);
        String s = kobe.toString();
        System.out.println(s);
        // 这种方式不能调用类的私有属性和方法
        System.out.println("name: " + kobe.name);
    }

通过反射创建这个类的对象

@Test
    public void test02() throws Exception {
        Class personClass = Person.class;
        // 获取构造
        Constructor constructor = personClass.getConstructor(String.class, Integer.class);
        Person kobe = (Person) constructor.newInstance("kobe", 18);
        // 调用age属性
        Field name = personClass.getDeclaredField("name");
        name.set(kobe,"wade");
        // 调用方法
        Method toString = personClass.getDeclaredMethod("toString");
        String invoke = (String) toString.invoke(kobe);
        System.out.println(invoke);

    }
Person{name='wade', age=18}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值