Skip to content

Latest commit

 

History

History
111 lines (48 loc) · 2.48 KB

反射.md

File metadata and controls

111 lines (48 loc) · 2.48 KB

1.什么是反射

JAVA反射机制是在运行状态中,

对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意方法和属性;

这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

2.反射机制的相关类

类名 用途

Class类 代表类的实体,在运行的Java应用程序中表示类和接口

Field类 代表类的成员变量(成员变量也称为类的属性)

Constructor类 代表类的构造方法

Method类 代表类的方法

3.反射中如何获取Class类的实例

(1)通过.class

Class class1 = Person.class;

(2)通过创建实例对象来获取类对象

Person person =new Person();

Class class2 = person.getClass();

(3) 通过包名,调用class的forName方法

Class class3 = Class.forName("day07.Person");

4.如何获取一个类的属性对象 & 构造器对象 & 方法对象 。

通过class对象创建一个实例对象

Cls.newInstance();

通过class对象获得一个属性对象

Field c=cls.getFields():

获得某个类的所有的公共(public)的字段,包括父类中的字段。

Field c=cls.getDeclaredFields():

获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的声明字段

获取构造器对象

Clazz.getConstructor();

通过class对象获得一个方法对象

Cls.getMethod(“方法名”,class……parameaType);(只能获取公共的)

Cls.getDeclareMethod(“方法名”);(获取任意修饰的方法,不能执行私有)

5.Class.getField和getDeclaredField的区别,getDeclaredMethod和getMethod的区别

getField

获取一个类的 ==public成员变量,包括基类== 。

getDeclaredField

获取一个类的 ==所有成员变量,不包括基类== 。

getDeclaredMethod*()

获取的是类自身声明的所有方法,包含public、protected和private方法。

getMethod*()

获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法 现的所有public方法。 。

6.反射机制的优缺点

优点:

1)能够运行时动态获取类的实例,提高灵活性;

缺点:

1)使用反射性能较低,需要解析字节码,将内存中的对象进行解析。

2)相对不安全,破坏了封装性(因为通过反射可以获得私有方法和属性)