前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java反射机制

java反射机制

作者头像
三哥
发布2018-06-15 13:38:38
8353
发布2018-06-15 13:38:38
举报
文章被收录于专栏:java工会java工会

1.反射的定义

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

java反射机制主要提供了以下功能

  • 在运行时判断任意一个对象所属的类;
  • 在运行时构造任意一个类的对象;
  • 在运行时判断任意一个类所具有的成员变量和方法;
  • 在运行时调用任意一个对象的方法;生成动态代理

2.反射的优缺点

为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念。程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言,相对的就是静态语言。

优点

增加程序的灵活性,避免将程序写死到代码里。反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中 灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把设计的很完美,当这个程序编 译后,发布了,当发现需要更新某些功能时,不可能要用户把以前的卸载,再重新安装新的版本。

缺点

对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

3.反射的相关操作

Java反射所需要的类并不多,主要有java.lang.Class类和java.lang.reflect包中的Field、Constructor、Method、Array类。

注意:Class类是Java反射的起源,针对任何一个你想探勘的类,只有先为它产生一个Class类的对象,接下来才能通过Class对象获取其他想要的信息。

那么反射能够用来做什么呢?

  • 获取成员方法Method
  • 获取成员变量Field
  • 获取构造函数Constructor

3.1获取成员方法Method

api

代码语言:javascript
复制
// 得到该类所有的方法,不包括父类的
public Method getDeclaredMethod(String name, Class<?>... parameterTypes);

// 得到该类所有的public方法,包括父类的
public Method getMethod(String name, Class<?>... parameterTypes); 

示例

代码语言:javascript
复制
//输出类的public方法        
Method[] methods = exampleObjectClass.getMethods();        
for (Method method : methods){            
    System.out.println("method = "+ method.getName());        
}

3.2获取成员变量Field

api

代码语言:javascript
复制
// 获得该类自身声明的所有变量,不包括其父类的变量
public Field getDeclaredField(String name);
 
// 获得该类自所有的public成员变量,包括其父类变量
public Field getField(String name);

示例

代码语言:javascript
复制
Field field = exampleObjectClass.getField("age");        
System.out.println("变量为:" + field.toString());

3.3获取构造函数Constructor

api

代码语言:javascript
复制
// 获得该类所有的构造器,不包括其父类的构造器 
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes);

// 获得该类所以public构造器,包括父类
public Constructor<T> getConstructor(Class<?>... parameterTypes);

示例

代码语言:javascript
复制
Constructor constructor = exampleObjectClass.getConstructor(String.class);   
System.out.println(constructor.toString());

到此,反射机制的基本知识就差不多了,后续学习springmvc时,spring的控制反转和依赖注入就是用反射机制实现的。

最后,如果你有仍何开发上面的问题都可以和我交流沟通。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java工会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档