您的位置:首页 > 编程语言 > Java开发

Java复习笔记(6)——反射

2016-12-06 19:52 344 查看
1、反射机制提供了动态操纵Java程序代码的方法,通常被用于JavaBean。

2、能够分析类的能力的程序称为反射。反射机制可以用来:

·在运行中分析类的能力。

·在运行中查看对象,例如,编写一个toString方法供所有类使用。

·实现通用的数组操作代码。

·利用Method对象,这个对象很像C++中的函数指针。

3、在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时类的标识,这个信息跟踪者每个对象所述的类。虚拟机利用运行时类型信息选择相应的方法执行。

4、Object类中的getClass方法将返回一个Class类型的实例。

5、利用getName方法可以获取类的名称,包括包名。

6、可以调用forName方法获得类名对应的Class对象,也可以通过T.class获得Class对象,其中T为任意类型

7、鉴于历史原因,getName方法应用于数组类型的时候会返回一个很奇怪的名字:

·Double[].class.getName() 返回: [Ljava.lang.Double

·int[].class.getName() 返回:[I

8、虚拟机为每个类型管理一个Class对象。因此,可以利用==运算符实现两个对象的比较操作。

9、利用Class类的newInatance方法可以调用默认的无参构造器初始化新创建的对象。

10、常用方法:

Java lang.Class 1.0

·static
ClassforName(String className);

返回描述类型名为className的Class对象。

·Object
newInstance();

返回这个类的新实例。

java.lang.reflect.Constructor 1.1

·Object
newInstance(Object[] args);

构造一个构造器所属类的新实例。

java.lang.Throwable 1.0

·void
printStackTrace();

将Throwable对象和栈的轨迹输出到标准错误流。

11、java.lang.reflect包中有三个类:Field、Method和Constructor分别用于描述类的域、方法和构造器。

12、getModifers方法用不同的为开关描述public和static这样的修饰符的使用状况。还可以利用Midifier类中的isPublic、isPrivate或isFinal等判断方法。

13、Class中的getFields、getMethods和getConstructors方法将分别返回类提供的public域、方法和构造器数组,其中包括超类中的共有成员。Class类的getDeclareFields、getDeclareMethods和getDeclaredConstructors方法将分别返回类中生命的全部域、方法和构造器,其中包括私有数据和受保护成员,但不包括超类的成员。

14、常用方法:

java.lang.Class 1.0

·Field[]
getFields() 1.1

·Field[]
getDeclaredFields() 1.1

getFields方法将返回一个包含Field对象的数组,这些对象记录了这个类或其超类的公有域。getDeclaredFields方法将返回包含Field对象的数组,这些对象记录了这个类的全部域。如果类中没有域,或者Class对象描述的是基本类型的数据类型,这些方法将返回一个长度为0 的数组。

·Method[]
getMethods() 1.1

·Method[]
getDeclaredMethods() 1.1

返回包含Method对象的数组:getMethods将返回所有的共有方法,包括从超类集成来的共有方法;getDeclaredMethods返回这个类或接口的全部方法,但不包括有超类继承了的方法。

·Constructor[]
getConstructors()

·Constructor[]
getDeclaredConstructors() 1.1

返回包含Constructor对象的数组,其中包含了Class对象所描述的类的所有公有构造器(getConstructors)或所有构造器(getDeclaredConstructors)。

java.reflect.Constructor 1.1

·Class
getDeclaringClass()

返回一个用于描述类中定义的构造器、方法或域的Class对象。

·Class[]
getExceptionTypes() (在Constructor和Method类中)

返回一个用于描述方法跑出的异常类型的Class对象数组。

·getModifiers()

返回一个用于描述构造器、方法或域的修饰符的整型数值。使用Modifer类中的这个方法可以分析返回值。

getName()

返回一个用于描述构造器、方法或域的名称的字符串。

·Class[]
getParameterTypes() (在Constructor和Method类中)

返回一个用于描述参数类型的Class对象数组。

·getReturnType() (在Method类中)

返回一个用于描述返回类型的Class对象。

java.lang.reflect.Modifier 1.1

·static
String toString(int modifiers)

返回对应modifiers中为设置的修饰符的字符串表示。

·static
boolean isAbstract(int modifiers)

·static
boolean isFinal(int modifiers)

·static
boolean isInterface(int modifiers)

·static
boolean isNative(int modifiers)

·static
boolean isPrivate(int modifiers)

·static
boolean isProtected(int modifiers)

·static
boolean isPublic(int modifiers)

·static
boolean isStatic(int modifiers)

·static
boolean isStrict(int modifiers)

·static
boolean isSynchronized(int modifiers)

·static
boolean isVolatile(int modifiers)

这些方法将将侧方法名对应的修饰符在modifiers值中的位。

15、通过反射机制访问私有域会跑出IllegalAccessEception异常,但可以通过setAccessible方法修改域的可见性。

16、可以通过set方法可以将对象的域设置为新值。

17、常用方法:

java.lang.reflect.AccessibleObject 1.2

·void
setAccessible(boolean flag)

位反射对象设置可访问标识。flag为true表明Java语言的防范检查,是的对象的私有属性可以被查询和设置。

·boolean
isAccessible()

返回反射对象的可访问标志的值。

·static
void setAccessible(AccessibleObject[] arrag, boolean flag)

是一种设置对象数组可访问标志的快捷方法。

java.lang.Class 1.1

·Field
getField(String name)

·Field[]
getField()

访问指定名称的公有域,或包含所有域的数组。

·Field
getDeclaredField(String name)

·Field[]
getDeclaredFields()

返回类中声明的给定名称的域,或者包含全部域的数组。

java.lang.reflect.Field

·Object
get(Object obj)

返回obj对象中用Field对象表示的阈值。

·void
set(Object obj, Object newValue

用一个新值设置obj对象中Field对象表示的域。

18、java.lang.reflect包中的Array类允许动态地创建数组。调用newInstance方法可以生成指定类型对象的数组。

Object newArray = Array.newInstance(componentType, newLength);

19、通过Array类的静态方法getLength可以获得数组的长度;使用Class类的方法getComponentType可以得到数组元素的类型。

20、常用方法:

java.lang.reflect Array 1.1

·static
Object get(Object array, int index)

·static xxx getXxx(Object
array, int index)

(xxx是boolean、bype、char、double、float、int、long、short之中的一种基本类型。)

这些方法将返回存储在给定位置上给定数组的内容。

·static
void set(Object array, int index, Object newValue)

·static
void setXxx(Object
array, int index, xxx newValue)

(xxx是boolean、bype、char、double、float、int、long、short之中的一种基本类型。)

这些方法将一个新值存储到给定位置上的给定数组中。

·static
int getLength(Object array)

返回数组的长度。

·static
Object newInstance(Class componentType, int length)

·static
Object newInstance(Class componentType, int[] lengths)

返回一个具有给定类型给定维数的新数组。

21、调用Method中的invoke方法可以调用指定的方法:

Object[] invoke(Object obj, Object... args)

其中,第一个参数为隐式参数,后面的参数为显式参数;如果是静态方法,则第一个参数可以忽略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java基础 反射机制