目录:

一.编译时与运行时

二.什么是反射

三.反射的运用

一.编译时与运行时

了解反射之前,必须先清楚编译时和运行时的区别。

编译时:将Java代码编译成.class文件的过程。

运行时:就是Java虚拟机执行.class文件的过程。

调用实例的方法:

1.编译时,是调用申明类型的成员方法,也就是所谓的编译时类型调用方法。

2.到运行时,调用的是实际的类型成员方法,也就是所谓的运行时类型的方法。

3.对于调用引用实例的成员变量,无论实在编译时还是运行时,都是调用编译时类型的成员方法。

二.什么是反射

运行状态中,可以知道任意类的所有属性和方法,并且可以调用方法和属性。这就是反射。

反射的概念很简单,但我们要理解下,平时我们开发中,经常都是我要一个方法就引包,调用。这就造成的这个文件里面没有引用包就会报错,使用反射的技术就可以将这个耦合度降低。

实际运用中,如果我们有个需求是不想要使用原本的某个类如:LoginModel类的login方法。要改用LoginModel2的login2方法。我们使用反射的话就只需要改获取类的名字和获取类的方法名。

反射这个技术在我们开发中其实应用的非常的广泛,开源框架中就经常用到,如现在比较流行的Retorfit框架中,创建接口实例的方法源码内就有反射的应用。拥有注解功能的框架Xutils、Butterknife、Dragger等。Android中的类加载器通常都是运用了反射(如:Android的启动过程中Activity的对象的创建-newActivity(ClassLoader cl....)方法)。

三.反射的应用

下面是反射的调用方法步骤:

1.获取Class。

2.用Class的方法获取所要调用的方法Method。

3.再用Method的invoke方法进行调用。

下面说下调用方式:

1、获取Class对象的三种方式

1.1 Object ——> getClass();   (此种方式是在实例对象中获取的,都已经有对象了那就不需要再用反射了)

实际代码:

Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。

Class stuClass = stu1.getClass();//获取Class对象

1.2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性。(此方法是需要导入包才行,依赖性太强)

实际代码:

Class stuClass2 = Student.class;

1.3 通过Class类的静态方法:forName(String  className)(这种方式最常用)

实际代码:

Class stuClass3 = Class.forName("fanshe.Student");

2.获取class的方法

我们拿到Class类后我们就可以用各种动态获取方法的方式,获取方法并且调用。

Class类里面有几个获取可调用方法的方法:

1.getMethods();//获取所有"公有方法",包含了父类的方法也包含Object类。 

2.getDeclaredMethods();//获取所有的成员方法,包括私有的(不包括继承的) 


3.getMethod(String name,Class<?>... parameterTypes)://单独的获取指定方法 (可获取公有方法和继承的方法)

4.getDeclaredMethod(String name,Class<?>... parameterTypes);//单独的获取指定方法(可获取私有的,但不可获取继承的) 

参数: name : 方法名; Class ... : 形参的Class类型对象

3.调用方法

得到这些我们想用的方法后,我们就可以调用它们了,调用的方法是:

Object invoke(Object obj,Object... args): //obj : 要调用方法的对象; args:调用方式时所传递的实参; 

很简单。如果看完觉得还是不是很懂,希望能够看些代码来熟悉下那么可以看下下面链接的文章,最好是能够自己也写上代码跟着看,会更深刻些。

Java基础之—反射(非常重要)

java的 反射机制相关推荐

  1. Java的反射机制 工厂模式综合讲解【转载自51CTO】

    2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...

  2. java xml 反射_Java 读取XML文件以及Java 的反射机制实现

    Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...

  3. Java编程:Java的反射机制中的 getComponentType() 方法

    转载自  Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...

  4. 搞懂Java的反射机制

    搞懂Java的反射机制 1.什么是反射? java的反射机制是指可以在运行状态下获取类和对象的所有属性和方法. 2.反射的作用? 1.在运行时获取一个类/对象的成员变量和方法 2.在运行时创建一个类的 ...

  5. java原理—反射机制

    http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html 一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指 ...

  6. java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)

    Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 作者:刘东标 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加 ...

  7. 学习:java原理—反射机制

    一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...

  8. Java —— Reflect反射机制

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

  9. 什么是Java的反射机制

    Java反射机制是Java的特点,是框架实现的基础,百度结果: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这 ...

  10. 什么是Java的反射机制?

    Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性. 运用JavaBean 的最常见的问题是:根据指定的类名,类字段名和所对应的数据,得到该类的实 ...

最新文章

  1. 电脑记事本在哪_【锦囊站第002期】电脑一秒内完成文件搜索是如何实现的?
  2. PNAS | 根际植保素合成调控细菌对植物的促生长作用
  3. swift LOG 输出
  4. 4-1 图像特效介绍
  5. php如何去除侧栏,设置内容区侧栏
  6. 【Linux】工作管理
  7. 怎样增强MyEclipse的代码自动提示功能
  8. 使用SDL打造游戏世界之入门篇 - 7
  9. root用户登录mysql后新建用户提示1045错误
  10. svn java注释_svn 强制用户添加注释 和 允许用户修改注释
  11. Testlink1.9.5的安装配置
  12. yaml语法三大规则
  13. Flickr.net傻瓜教程(三)--打造自己的图片搜索引擎
  14. heartbeat+ldirectory实现LVS-DR负载均衡器的高可用
  15. milantgh php安全,PHP漏洞全解(一)-PHP网站的安全性问题
  16. 计算2+22+222
  17. 51NOD - 1381 1381 硬币游戏【思维+数学期望】
  18. Maven项目 cityFileFK02数据库连接(课外完成)
  19. Hadoop之HDFS的使用
  20. 用时间做种子生成随机数

热门文章

  1. 【2019春招】平安科技开发实习生面经
  2. 【微信小程序】判断手机号是否合法
  3. 高等数学(第七版)同济大学 习题12-7 个人解答
  4. VDA6.5认证咨询,产品审核与其他审核方式及检验的区别
  5. vue 省市区选择插件v-distpicker设置初值与选择后触发方法
  6. JS实现随机抽奖功能
  7. 一曲京声人去远——纪念刘大中校友100周年诞辰
  8. 火焰传感器+蜂鸣器 实现温度报警
  9. Java中的请求域(Request)《笔记》
  10. Android显示Gif图片