反射

作者: 夜沐下的星雨 | 来源:发表于2020-05-31 19:35 被阅读0次

反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性

通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。

反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

Java 反射主要提供以下功能:

在运行时判断任意一个对象所属的类;

在运行时构造任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);

在运行时调用任意一个对象的方法

重点:是运行时而不是编译时

简单应用:

public class Book implements Parcelable{

    private int id=1;

    private String name="android";

    private String author="wf";

    private String getName(){

        return name;

    }

}

Book类中属性和方法都是私有的,现在我们通过反射来访问这些属性和方法。

String s = null;

try{

    Class<?> bookClass = Class.forName("cc.abto.demo.Book");//完整类名

    Object book = bookClass.newInstance();//获得实例

    Method getAuthor = bookClass.getDeclaredMethod("getName");//获得私有方法

    getAuthor.setAccessible(true);//调用方法前,设置访问标志

    s = (String) getAuthor.invoke(book);//使用方法

}catch (Exception e)

    e.printStackTrace();

}

可以看到上面代码中我们用Class和Method这两个类完成了反射,这两个类分别对应了类和方法,也就是包装了类和方法的信息,下面对反射的部分API做一下简单介绍

Class类:代表一个类,位于java.lang包下

Field类:代表类的成员变量(成员变量也称为类的属性)

Method类:代表类的方法

Constructor类:代表类的构造方法

Array类:提供了动态创建数组,以及访问数组的元素的静态方法

相关文章

  • Java基础之反射

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

  • 镜面反射矩阵的推导

    镜面反射是以镜面作为反射平面,实物与反射物到反射平面的距离相等,实物与反射物方向相反,所以,反射矩阵由反射平面确定...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • Java互联网公司-经典面试题附答案

    基础:Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?优点:反射具有解耦性,缺点:反射属...

  • Java反射与joor反射库的使用

    java原生反射的使用 反射构造对象 反射方法 反射字段 joor反射库的使用 github:https://gi...

  • Java反射

    什么是反射? 反射的作用? 反射性能优化?

  • 反射三定律

    反射第一定律:反射可以将interface类型变量转换成反射对象 反射第二定律:反射可以将反射对象还原成inter...

  • 反射

    1.反射是什么?反射的定义,概念 2.为什么要学反射? 3.怎么使用反射?反射的使用

  • 一周岁前做好两件事,孩子就不会语言迟缓,保证口齿伶俐

    与语言发展相关的原始反射有四个:张口反射、足跖反射、抓握反射和手拉反射,每个反射的发生、发展和整合都是次第进行的,...

  • 面试官问go反射第一弹

    目录 反射概念 reflect包 反射类型(Type)和种类(Kind) 反射类型(Type)使用 反射类型对象(...

网友评论

    本文标题:反射

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