Java 反射

反射概念:

       Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

Class类:

       类是具有相同属性或者行为的一类事物,那么类本身也可以再被抽象,因为类们也有共同属性和行为(比如类都有属性,都有构造器,都有方法,都能调用方法),所以把类们又抽象成了一个类Class。


       众所周知Java有个Object类,是所有Java类的继承根源,其内声明了数个应该在所有Java类中被改写的方法:hashCode()、equals()、clone()、toString()、getClass()等。其中getClass()返回一个Class 对象。

       Class类十分特殊。它和一般类一样继承Object,其实体用以表达Java程序运行时的classes和
interfaces,也用来表达enum、array、primitive Java types(boolean,byte,char, short,int, long, float,double)以及关键词void。当一个class被加载,或当加载器(classloader)的defineClass()被JVM调用,JVM 便自动产生一个Class对象。

在学习Class类的过程中我们还需要学习Field类,Method类,Constructor类

  • Field类:类属性的抽象
  • Method类:类方法的抽象
  • Constructor类:类构造器的抽象

class类中要掌握的方法:

  1. 方法一:通过Class.forName("类的全路径");
  2. 方法二:通过类的名字打“.class”,如:Person.class;
  3. 方法三 :通过调用该类的对象调用getClass()方法;
  •  static Class<?>.forName(String className) : 返回与带有给定字符串名的类或接口相对应的Class对象。
  • Field.getDeclaredField()(String name):返回一个field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段。
  • Field[].getDeclaredFields():返回一个Field对象的一个数组,这些对象反映此Class对象所表示的类或接口所声明的所有字段。
  • Method.getDeclaredMethod(String name,Class<?>...parameterTypes):返回一个Method对象,该对象反映此Class对象所表示的类或接口的指定已声明方法
  • Method[].getDeclaredMethods():返回Method对象的一个数组,这些对象反映此Class对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
  • Constructor<T>.getConstructor(Class<?>... parameterTypes):返回一个Constructor对象,它反映此Class所表示的类的指定公共构造方法。
  • Constructor<?>[].getConstryctors():返回一个包含某些Constructor对象的数组,这些对象反映此Class对象所表示的类的所有公共构造方法。
  • T.newInstance():使用默认构造器创建此Class对象所表示的类的一个新实例 

Method反射调用自身

Object.invoke(Object obj,Object...  args) :对带有指定参数的指定对象调用由此Method对象表示的底层方法。

  • 如果底层是实例方法,第一个参数就是该对象实例,第二个参数是方法的参数列表,invoke的返回值就是实例方法的返回值。
  • 如果底层方法是静态的,那么可以忽略指定的obj参数。该参数可以为null。
  • 如果底层方法所需的形参数为0,则,所提供的args数组长度可以为0或null。

Field类要掌握的方法

  • Class<?>.getType():返回一个Class对象,它标识了此Field对象所表示字段的声明类型。
  • String.getName():返回此Field对象表示的字段的名称。
  • void.set(Object obj,Object value):将指定对象变量上此Field对象表示的字段设置为指定的新值。

Constructor类要掌握的方法

T.newInstance(Object...  initargs):使用此Constructor对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值