Java 反射相关

Class 类介绍

对象是对客观事物的抽象,是一个自我包含的组件,它包含能够使得某一类型的数据有用所需要的属性和方法。 对象的属性是指它所知道的,而对象的方法是指它所能做到的。类是对象的抽象,对象是类的具体实例。

在 wikipedia 中是这样定义 Reflection 的:

In computer science, reflection is the ability of a computer program to examine, introspect, and modify its own structure and behavior at runtime.

在程序运行期间, Java 运行时系统始终为所有的对象维护一个被称为运行时的类型标识,以便动态操作 Java 代码 (反射)。这个信息跟踪每个对象所属的类。保存这些信息的类称作 class 类。

那么这个保存信息的类的实例对象如何表示?这个实例对象有三种表示方式

  1. Class c1 = Foo.class; // 实际上告诉我们任何一个类都有一个隐含的静态成员变量 class

  2. Class c2 = foo1.getClass(); // 已经知道该类的对象通过 getClass 方法获得,c1、c2 表示了 Foo 类的信息(class type)

  3. Class c3 = null;

    c3 = Class.forName("类的全称");

我们可以通过类的 class 类创建该类的对象实例:Foo foo = (Foo)c1.newInstance();

动态加载类与静态加载类

动态加载指运行时加载,而静态加载指在编译时就确定。

  • Class.forName(“类的全称”)不仅表示类的类类型,还代表了动态加载类

  • new 创建对象,是静态加载类,在编译时刻就需要加载所有可能使用到的类。

获取类的信息

要想得到类的信息,首先要获取类的类类型。

方法的反射 方法是 java.lang.reflect.Method 类对象,一个成员方法就是一个 Method 对象。方法的名称和参数列表才能唯一决定某个方法。方法的反射操作是指 method.invoke(对象,参数列表) 来调用方法

成员变量的反射 成员变量是 java.lang.reflect.Field 类对象,Field 类封装了关于成员变量的操作

构造函数的反射 构造函数是 java.lang.Constructor 类对象, Constructor 类封装了关于构造函数的操作。

注:Java 中集合的泛型,是防止错误输入的,只在编译阶段有效,经过编译无效。利用方法反射就可以绕过编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值