初识Java反射

一、什么是反射

       反射是运行中的程序检查自己和软件运行环境的能力,就是可以在程序运行的时候动态加载类,查看类的信息,生成对象,或操作生成对象。类在运行的时候,可以得到该类的信息,并且可以动态的修改这些信息,自己能看到自己,跟照镜子一样。

       通俗地讲,反射用于动态加载指定的类,即编译时不加载这个类,而在程序运行时才加载(、探知、自审)这个类,这样的特点就叫反射。

       Java反射相关的操作都封装在java.lang.reflect包里。

二、反射的用途

1.运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,降低类之间的藕合度。比如A类写完了,A类里用到B类,但是B类还没有写完。在编译A类时,不会报错,更不会导致程序的崩溃

一个例子:

2.在使用 IDE(如 Eclipse\IDEA)编写Java类时,在类名或对象名后输入一个点“.”时,编译器就会自动列出它的属性或方法,这里就会用到反射。

3.反射最重要的用途就是开发各种通用框架。比如在spring中,所有的类Bean都交给spring容器管理,无论是XML配置Bean还是注解配置,当程序需要从容器中获取Bean来依赖注入时,容器会读取配置信息(类的信息),spring根据这些信息动态加载类。

三、理解类类型

以“A类”为例

  • A类是Class类的一个实例对象。在面向对象的世界里,万事万物皆对象,包括类本身(任何一个类都是java.lang.Class类的实例对象),类的方法,类的成员变量等等(静态的成员、基本数据类型不是对象)
  • c1 or c2 or c3Class的对象,表示A类类类型(Class类型)
  • 方法三用到的Class.forName("类的全称"),不仅代表了类的类类型,还代表了动态加载类(运行时加载类)。静态加载类:编译时加载类,通过new创建对象就是静态加载类。

  •  可以通过类的类类型创建该类的实例对象,即通过c1 or c2 or c3创建A类的对象,要求A类里有无参的构造函数。
  • 可以通过Class的对象c1 or c2 or c3里的相关方法获取A类的信息,包括类的名称、成员变量、成员方法等等(皆对象)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值