1-20 反射

反射机制概述

1. 反射机制定义

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键

2. 反射机制实现功能概述

1)只要给定类的全路径,即可通过反射获取类的所有信息

2)反射可以在程序运行时获取任意一个对象所属的类对象

3)在运行时可以获取到类中所有属性对象,并对其操作(包括私有属性)

4)在运行时可以获取到类中、父类中所有方法,并调用

5)目前主流的应用框架如Struts2,Hibernate,Spring,SpringMVC等框架的核心全部是利用Java的反射机制来实现的。

Class对象概述

  1. Class(java.lang.Class)是什么?

Java在将.class字节码文件载入时,JVM将产生一个java.lang.Class对象代表该.class字节码文件,从该Class对象中可以获得类的许多基本信息,这就是反射机制。所以要想完成反射操作,就必须首先认识Class类。

需要注意的是:

1)通过Class类的对象,可以知道他所描述的类的信息;

2)Class不是所有类的父类(Object);

2. Class对象的常用方法介绍

方法名

释义

getName()

获得类的完整名称

getDeclaredFields()

获得类中的所有属性,而getFields()只能获取到公有属性

getDeclaredField(“fieldName”)

根据变量名,获取类中的变量

getDeclaredMethods()

获得类中的所有方法,而getMethods()只能获取到公有方法

getConstructors()

获得类的构造方法

newInstance()

实例化对象,调用这个方法要求该类必须具有无参构造方法

getMethod(String name,parameterType.class,... )

根据方法名,获得方法对象,同getDeclaredMethods()

(方法名,参数类1.class,参数类2.class.....)

3. 获取Class对象

方法一:

Class c = Class.forName("w6.Car"); //Class类的静态方法forName(“完整的包名+类名”)

方法二:

Book book = new Book();

Class c = book.getClass();

方法三:

Class c = Book.class;

//通过类对象获得实例对象

Book book = (Book) c.newInstance();

Field对象的机制与实现

1. Field对象概述

1)Java.lang.reflect.Field类中、接口中属性对象的类。

2)可以操作类中私有,以及公有等全部属性和属性的信息。

2. Field对象的常用方法

方法名

释义

getName()

获得属性名称

getType()

获得属性类型

get(Object obj)

取得obj对象中这个属性的值

set(Object obj,Object value)

向obj对象中这个属性赋值value

setAccessible(true)

启用/禁用访问控制权限,开启或关闭私有属性的访问权限

注意:私有属性不能用get(Object obj)直接访问到属性值,必须在调用get(Object obj)之前开启访问权限,即调用setAccessible(true)

Method对象的机制与实现

1. Method对象概述

1)java.lang.reflect.Method类是用于表示类中、接口中方法对象的类

2)可以操作类中私有以及公有等全部方法

2. Method对象的常用方法介绍

方法名

释义

getName()

获得方法名称

getReturnType()

获得方法返回值类型

invoke(Object obj,Object parameter,...)

调用obj对象的该方法

getParameterTypes()

获得方法所有参数类型,按照类中参数顺序返回Class数组

getDeclaredAnnotations

获取方法的全部注解

getModeifiers()

返回方法的修饰符(如:static、final等)

示例:

Class cls = Class.forName("com.card.charge.deal.HDL");

//获取某一个方法

//getDeclaredMethod(方法名,参数类型,参数类型)

Method method = cls.getMethod("run",String.class);

//执行一个方法

//newInstance()创建一个类的对象,这里String res接收,表示该方法有返回值

//null表示该方法没有入参

String res = (String) method.invoke(cls.newInstance(),null);

Class对象的三种获取方式

Class类的对象无法实例化,其构造方法是私有的。

序号

方式

1

通过对象的getClass()方法获取Class对象。

2

通过类名.class 获取Class对象。

3

通过Class.forname(“全限定类名”)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值