黑马程序员——Java学习笔记之13——“反射”总结

来源:互联网 发布:淘宝卖家可以改名字吗 编辑:程序博客网 时间:2024/06/05 11:53

----------- android培训java培训、期待与您交流! ------------



反射:就是将Java类中的各种成分映射成相应的Java类。

Class类:Class类是一种用来描述类的类。它描述了Java中所有类对象的属性,包括:字段(Field)方法(Method)构造函数(Constructor)实现的接口(Interface)等等。我们知道Class文件是反射的基础。(一个类的Class文件在内存中只能存在一份,这也是为什么在多线程安全问题中,我们可以用一个类的字节码文件作为锁的原因)通常,获取一个类的字节码文件的方法又以下3种:


这里还涉及到了一点小知识,就是可以通过isPrimitive()来判断一个类是否是基本类型。

9个预定义的Class实例对象包括:byte.class、short.class、char.class、boolean.class、int.class、float.class、long.class、double.class外加void.class。判断示例如下:

System.out.println(void.class.isPrimitive());//返回true


通过反射获取一个类的构造函数(Constructor)

通过getConstructor(parameterTypes)方法可以获得某个类中具有某种特定参数类型的构造函数。

通过getConstructors()方法可以获取到某个类中所有的构造方法

还可以通过getDeclaredConstructor(parameter Types)方法来获取到私有的构造方法。具体示例如下:



通过反射获取一个类的字段(Field)

可以通过getField(String args)获得该类中的某个字段

可以通过getFields()方法获得该类所有的字段

如果要获取私有的成员变量,就要使用getDeclaredFields(),并使用setAccessible(true)来实现对该成员的访问。实例如下:



通过反射获取一个类的方法(Method)

通过getMethod(函数名,函数对应的参数列表) 获取类中的一个指定方法。如果没有参数,可以为null,也可以直接不写

getMethods()方法可以获取到所有的类中方法。

使用getDeclaredMethod(函数名,函数对应的参数列表) 可以获得类中的私有方法。具体示例如下:

假设自定义的一个Person类中有一个静态方法,private setName(String name); 那么,要获取到该方法,可以:

Person p = new Person();

Method setMethod=Person.class.getDeclaredMethod(“setName”,String.class);
setMethod.setAccessable(true);
setMethod.invoke(p,"zby");//调用invoke方法执行该对象的setName方法。


通过反射来调用数组

首先,具有相同纬度且元素类型相同的数组的字节码文件是相同的,即它们具有相同的Class对象。其次,要验证一个Class对象的父类是不是Object,可以用getSuperClass()方法来验证。其它的结合以下示例来说明:


下面为数组的反射调用实例:



----------- android培训java培训、期待与您交流! ------------


0 0
原创粉丝点击