精品 Java知识复习之反射

概述

JAVA反射机制是在运行状态中,对于任意一个类都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

什么是Class类

当一个类Class(不是对象)被加载后,Java虚拟机会自动产生一个Class对象该对象内封装了这个类的信息,通过这个Class对象我们可以进行一系列的操作。Class类的是Java反射机制的起点如对类进行实例化、调用方法等.

1.获取Class对象

Class demo=Class.forName(“包路径”);

2.获取类成员变量

在Java反射机制中,成员变量一般叫做(Field),获取类中的成员变量实际上是获取其Field

2.1 获得类声明的所有字段

Field[]fields=demo.getDeclaredFields();

2.2 根据字段名称获得某个字段

Field filed=demo.getDeclaredField(“account”);

3. 构造函数

3.1 获得类声明的所有构造函数

Constructor[] constructors=demo.getDeclaredConstructors();

3.2 获得类的指定构造函数

Constructor constructor=demo.getDeclaredConstructor(String.class,String.class);

4.获取类成员函数

在Java反射机制中,成员函数一般叫做(Method),获取类中的成员函数,实际上是获取其Method

4.1 获得类声明的所有成员函数

Method[] methods=demo.getDeclaredMethods();

4.2 获得某个成员函数

Method method=demo.getDeclaredMethod(“getAccount”,null);//方法名,参数类型

5.实例化对象

Object obj=demo.newInstance(“1111”,”1111”);

5.1 成员变量赋值

Field field=demo.getField(“abc”);
field.set(obj,”123);
前提是 字段 abc 是public类型的.

5.2 调用成员函数

method=clsCustomer.getMethod(“display”);
method.invoke(obj);

6 代码示例

 Class clsJFrame=Class.forName(“javax.swing.JFrame”);
 Object obj=clsJFrame.newInstance();
 Method setTitle=clsJFrame.getMethod(“setTitle”,String.class);
 setTitle.invoke(obj,”这是一个窗口”);
 Method setSize=clsJFrame.getMethod(“setSize”,int.class,int.class);
 setSize.invoke(obj,200,100);

7. 合理使用反射

(1)反射的优势
在不知道具体类的情况下可以实例化该对象在不知道对象类型的情况下,可以访问对象成员

(2)反射的缺点
代码更难懂、性能更低所以什么时候使用反射,就要靠业务的需求,大小,以及经验来决定。

(3) 泛型是在编译期控制的,反射是动态编译的所以可以越过泛型检查器。

暂无数据
关注 私信
文章 专栏 文档 话题

相关推荐

  • Java知识复习之加密与解密
  • Java知识复习之多线程
  • 面试第三篇之Java基础
  • Java知识复习之异常处理
  • Java知识复习之接口VS抽象类
联系客服