java的 反射机制
目录:
一.编译时与运行时
二.什么是反射
三.反射的运用
一.编译时与运行时
了解反射之前,必须先清楚编译时和运行时的区别。
编译时:将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的 反射机制相关推荐
- Java的反射机制 工厂模式综合讲解【转载自51CTO】
2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...
- java xml 反射_Java 读取XML文件以及Java 的反射机制实现
Java 读取XML文件以及Java 的反射机制实现 代码部分 import java.io.File; import javax.xml.parsers.DocumentBuilder; impor ...
- Java编程:Java的反射机制中的 getComponentType() 方法
转载自 Java编程:Java的反射机制中的 getComponentType() 方法 Java 中所有的类都继承自 Object,数组本身也是一个 Class,如果我们能够得到数据的 Class ...
- 搞懂Java的反射机制
搞懂Java的反射机制 1.什么是反射? java的反射机制是指可以在运行状态下获取类和对象的所有属性和方法. 2.反射的作用? 1.在运行时获取一个类/对象的成员变量和方法 2.在运行时创建一个类的 ...
- java原理—反射机制
http://www.cnblogs.com/forlina/archive/2011/06/21/2085849.html 一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指 ...
- java反射之获取class对象,Java之反射机制(获取Class对象的三种方式)
Java之反射机制(获取Class对象的三种方式) 开发工具与关键技术:MyEclipse 10,java 作者:刘东标 撰写时间:2019-06-14 如何得到各个字节码对应的实例对象? 每个类被加 ...
- 学习:java原理—反射机制
一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序 ...
- Java —— Reflect反射机制
JAVA反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java的反射机制. ...
- 什么是Java的反射机制
Java反射机制是Java的特点,是框架实现的基础,百度结果: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这 ...
- 什么是Java的反射机制?
Java 的反射机制是使其具有动态特性的非常关键的一种机制,也是在JavaBean 中广泛应用的一种特性. 运用JavaBean 的最常见的问题是:根据指定的类名,类字段名和所对应的数据,得到该类的实 ...
最新文章
- 电脑记事本在哪_【锦囊站第002期】电脑一秒内完成文件搜索是如何实现的?
- PNAS | 根际植保素合成调控细菌对植物的促生长作用
- swift LOG 输出
- 4-1 图像特效介绍
- php如何去除侧栏,设置内容区侧栏
- 【Linux】工作管理
- 怎样增强MyEclipse的代码自动提示功能
- 使用SDL打造游戏世界之入门篇 - 7
- root用户登录mysql后新建用户提示1045错误
- svn java注释_svn 强制用户添加注释 和 允许用户修改注释
- Testlink1.9.5的安装配置
- yaml语法三大规则
- Flickr.net傻瓜教程(三)--打造自己的图片搜索引擎
- heartbeat+ldirectory实现LVS-DR负载均衡器的高可用
- milantgh php安全,PHP漏洞全解(一)-PHP网站的安全性问题
- 计算2+22+222
- 51NOD - 1381 1381 硬币游戏【思维+数学期望】
- Maven项目 cityFileFK02数据库连接(课外完成)
- Hadoop之HDFS的使用
- 用时间做种子生成随机数