【Java EE】关于Java反射技术的一些理解

反射是Java运行时识别类的能力,允许程序在运行时检查类的方法和属性。Class类是反射的入口,一个类在JVM中只有一个Class对象。实现反射主要有三种方式:通过对象的getClass(),类名.class,和Class.forName()。Class类提供了获取构造器、方法和字段的API。反射主要功能包括调用私有方法、获取元数据、实例化对象等。
摘要由CSDN通过智能技术生成

1、什么是反射

      反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。 简单来说,反射就是运行期识别类的能力,能解析出类的元数据。

2、Class类

       Class类是反射机制的入口。

       Class类的实例表示正在运行的Java 应用程序中的类和接口。也就是jvm中有N多的实例每个类都有该Class对象(包括基本数据类型)。Class类没有公共构造方法。注意在运行期间,一个类只有一个Class对象产生。

      当类加载以后,jvm 便自动产生一个Cass对象,使用该对象就可以获取一个类中的方法、成员以及构造方法的声明和定义等信息。

3、实现反射的三种方式

      1)object.getclass()方法,例如:

Student stu = new Student ();
Class stuclass = stu.getClass ();
System.out.println(stuclass);

      因为Object 类中存在getClass( )方法,而所有类都继承了Object 类,所以可以调用Object类来获取。但这种方式下,对象都有了还要反射什么,所以几乎不用这种方式。

     2)类名.class,例如:

Class stuclass = Student.class;
System.out.println(stuclass);

      因为任何数据类型(包括基本数据类型)都有一个“静态"的class 属性,我们可以据此获得。但这种方式需要导入类的包,依赖太强,所以用的也不多。

    3) Class. forName();方法,例如:

Class stuclass = Class.forName ("zjy.Student");
System.out.println(stuclass);

      一般我们都使用这种方式,一个字符串可以传入也通过配置文件导入。

4、常用的Class类方法

public Constructor[] getConstructors()获取所有”公有的”构造方法
public Constructor[] getDeclaredConstructors()获取所有的构造方法(包括私有、受保护、默认、公有)
public Constructor getConstructor(parameterTypes)获取单个的”公有的”构造方法
public Constructor getDeclaredConstructor(parameterTypes)获取"某个构造方法",可以是私有的,或受保护、默认、公有
public Field getField (String fieldName)获取单个的”公有的”成员交量
public Field getDeclaredField (String feldName)获取某个成员变量,可以是私有的,或受保护、默认、公有
public Method[] getMethods()获取所有”公有方法”(包含了父类的方法也包含Object类)
public Method[] getDeclaredMethods()获取所有的成员方法,包括私有的(不包括继承的)
public Method getMethod (String name, Class <?>---parameterTypes)获取单个的”公有的"成员方法
public Method getDeclaredMethod (String name, Class <?>---parameterTypes)获取某个成员方法,可以是私有的,或受保护、默认、公有

5、反射的主要功能

     1)让java可以完成动态语言的部分功能;
     2)可以实现一些特殊的功能,例如调用私有方法,属性;
     3)获取某个对象的类型的元数据:(类,方法,雇性,构造方法);
     4)获取某个类的父类(接口);
     5)调用方法;
     6)调用属性;
     7)实例化对象;
 

     

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值