栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

1-20 反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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(“全限定类名”)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号