美文网首页
反射的基本实现

反射的基本实现

作者: 哈哈007_229c | 来源:发表于2018-05-02 09:49 被阅读0次

1.java里的class文件的加载

1、类型是编译器已知的,这种.class文件在编译的时候,编译器会把.class文件打开检查(ps:不是加载)

2、从别的地方获取到了一个引用,然后动态的把这个未知类型的引用的对象的.class文件加载进jvm虚拟机里

java里的class文件的加载

RTTI(Run-Time Type Identification)运行时类型识别

反射(reflection)

RTTI(Run-Time Type Identification)运行时类型识别

如果不知道某个对象的确切类型,RTTI可以告诉你,但是有一个前提:这个类型在编译时必须已知,这样才能使用RTTI来识别它。

反射(reflection)

Class类与java.lang.reflect类库一起对反射进行了支持,该类库包含Field、Method和Constructor类,这些类的对象由JVM在启动时创建,用以表示未知类里对应的成员。这样的话就可以使用Contructor创建新的对象,用get()和set()方法获取和修改类中与Field对象关联的字段,用invoke()方法调用与Method对象关联的方法。另外,还可以调用getFields()、getMethods()和getConstructors()等许多便利的方法,以返回表示字段、方法、以及构造器对象的数组,这样,对象信息可以在运行时被完全确定下来,而在编译时不需要知道关于类的任何事情。

2.知识剖析

反射

定义:能够分析类能力的程序被称为反射

反射库(reflection library):提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵Java代码的程序

Class类

在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息保存着每个对象所属的类足迹。虚拟机利用运行时信息选择相应的方法执行。

Class类:专门用来保存上述信息的类,可以用来访问这些信息。

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。也就是jvm中有N多的实例每个类都有该Class对象。(包括基本数据类型)Class类没有公共构造方法。Class对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。

获取Class对象的三种方式

Object ——> getClass();

任何数据类型(包括基本数据类型)都有一个“静态”的class属性

通过Class类的静态方法:forName(String  className)(常用)

Class类获取未知类里对应的成员

.getFields() .getMethods() .getConstructors()

java.lang.reflect利用反射分析类的能力

Field:描述类的域

Method:描述类的方法

Constructor:描述类的构造器

Method.invoke(Object, Object[])

调用对象所描述的方法,传递给定参数,并返回方法的返回值

反射机制的优缺点

优点:运行期类型的判断,动态类加载,动态代理使用反射。

缺点:性能是一个问题,反射相当于一系列解释操作,通知jvm要做的事情,性能比直接的java代码要慢很多。

api:接口是应用程序和模块之间相互沟通的方式。提供某些功能的应用程序或者模块为了与其它程序相互沟通,对外公开了某些功能的调用方式方法,是应用程序和模块之间相互沟通的方式

3.编码实战

4.常见问题

1、private修饰?

.setAccessible(true);  作用:在用反射时访问私有变量

2、父类?

继承Object类

3. 反射的作用?

调用一些私有方法,实现黑科技。比如双卡短信发送、设置状态栏颜色、自动挂电话等

实现序列化与反序列化,比如PO的ORM,Json解析等

实现跨平台兼容,比如JDK中的SocketImpl的实现

通过xml或注解,实现依赖注入(DI),注解处理,动态代理,单元测试等功能。比如Retrofit、Spring或者Dagger

5.参考文献

Field类的setAccessible()方法

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

Java核心技术 卷1

相关文章

  • 反射的基本实现

    1.java里的class文件的加载 1、类型是编译器已知的,这种.class文件在编译的时候,编译器会把.cla...

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • 注解

    注解实现原理 底层使用反射实现。申明注解类需要加 @interface 注解类里只支持基本类型、String以及枚...

  • 反射

    什么是反射? 反射的主要用途 反射的基本运用

  • Unity-Shader(三)高光反射&Blinn-Ph

    先看一下基本光照模型中的高光反射部分的计算公式: 逐顶点光照实现 高光反射 分析 在Properties语义块中声...

  • 工厂模式的优化--增加反射或配置文件

    参考:反射例子 内容 工厂模式 增加反射来提高灵活性 增加配置文件进一步优化 代码实现 实体类 基本的抽象工厂 增...

  • Java获取反射的三种方法

    1.通过new对象实现反射机制 2.通过路径实现反射机制 3.通过类名实现反射机制 public class Ge...

  • Java中的反射|SquirrelNote

    前言 本篇简介: 反射概述 反射具体功能实现 Android中的反射应用 一、反射(Reflection)概述 1...

  • 反射的基本使用

    classFoo(object): def__init__(self,name,age): self.name =...

  • 关于反射探头的实时反射

    用反射探头实现镜面反射 之前看到过一个日本人写的文章,关于如何使用Unity的反射探头来实现地板的镜面反射效果。 ...

网友评论

      本文标题:反射的基本实现

      本文链接:https://www.haomeiwen.com/subject/kfxglftx.html