黑马程序员——反射

Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制——Reflection。我们可以在Java程序运行时加载、探知、使用编译期间完全未知的class,也就是说Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

继承自Object的子类都有Object的方法——Class<?>  getClass(),通过该方法可以获取任意对象的Class对象(类的字节码文件)。任意一个类的Class对象都只有一个,所以类的字节码文件对象可以在并发编程中用作同步代码块的锁。

除了Object的getClass()方法其他可以获取Class对象的方法:
1.Class本身的静态方法——static Class<?> forName(String className);
2.类名.class就是该类的字节码文件对象;

Class类的方法:
1)Field getField(String name)——返回该类中由String类型字段名参数所指向的public类型的成员变量(Field类型);
2)Field[] getFields()——返回该类中所有public类型的成员变量的数组(Field[]类型);
3)Field getDeclaredField(String name)——返回该类中由String类型字段名所指向的已声明的成员变量(Field类型);
4)Field[] getDeclaredFields()——返回该类中所有已声明的成员变量的数组(Field[]类型);
5)Method getMethod(String name,Class<?>...parameterType)——返回该类中由String参数指代的方法名和Class<?>类型可变参数列表共同指向的public类型的成员方法(Method类型);
6)Method[]  getMethods()——返回该类中所有public类型成员方法的数组(Method[]类型);
7)Method getDeclaredMethod(String name,Class<?>...parameterType)——返回该类中由String参数指代的方法名和Class<?>类型可变参数列表共同指向的已声明的成员方法(Method类型);
8)Method getDeclaredMethods()——返回该类中所有已声明的成员方法的数组(Method[]类型);
9)Constructor<T> getConstructor(Class<?>...parameterType)——返回该类中由给定的 Class<?>类型可变参数列表确定的public类型的构造方法(Constructor类型);
10)Constructor<?>[] getConstructors()——返回该类中所有public类型的构造方法的数组(Constructor[]类型);
11)Constructor<T> getDeclaredConstructor(Class<?>...parameterType)——返回该类中由给定的 Class<?>类型可变参数列表确定的已声明的构造方法(Constructor类型);
12)Constructor<?>[] getDeclaredConstructors()——返回该类中所有已声明的构造方法的数组(Constructor[]类型);
13)String getName()——以String形式返回该类的名称;

14)boolean isArray()——判断该Class对象是否是数组类;
15)boolean isInstance(Object obj)——判断该Class对象是否与指定的obj对象赋值兼容;
16)boolean isInterface()——判断该Class对象是否表示一个接口类型;
17)boolean isPrimitive()——判断该Class对象是否表示一个基本数据类型;

18)T newInstance()——创建该类的一个新实例;
19)URL getResource(String name)——获取给定名称所指代的文件的URL。

由以上方法可以引出一些新类型:
Field——成员变量;
Method——成员方法;
Constructor——构造方法;

Field类
Object get(Object obj)——获得obj的该成员的Object对象;
byte getByte(Object obj)——用于获取obj的byte类型成员的值;
short getShort(Object obj)——用于获取obj的short类型成员的值;
int getInt(Object obj)——用于获取obj的int类型成员的值;
long getLong(Object obj)——用于获取obj的long类型成员的值;
float getFloat(Object obj)——用于获取obj的float类型成员的值;
double getDouble(Object obj)——用于获取obj的double类型成员的值;
boolean getBoolean(Object obj)——用于获取obj的boolean类型成员的值;
void set(Object obj,Object value)——将obj的该成员的值赋作value;
void setByte(Object obj,byte b)——将obj的该byte类型成员的值赋作b;
......short、int、long、float、double、boolean等的set方法;
String getName()——返回该成员的名称;
Class<?> getType()——返回该成员的类型。

Method类
String getName()——返回该方法的名称;
Object invoke(Object obj,Object...args)——按给定Object类型参数列表调用obj的该方法,并返回结果(Object类型)。

Constructor类
T newInstance(Object...initargs)——调用该构造方法实例化对象(Object参数列表要与该方法的参数列表对应),T是实例化的对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值