黑马程序员_高新技术之反射

来源:互联网 发布:逆战最新源码 编辑:程序博客网 时间:2024/04/30 04:28

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


一、Class类

Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class。

Class类代表Java类,它的实例对象对应各个类在内存中的字节码。例如:示例对象Person对应Person类的字节码.

得到各个字节码对应的实例对象三种方法( Class类型)

1、类名.class例如:System.class;

2、对象.getClass()例如:new Date().getClass();

3、Class.forName("类名")例如:Class.forName("java.util.Date");


二、反射

反射就是把Java类中的各个成分映射成相关的Java类。例如,一个Java类中用一个Class类的对象来表示类中的组成部分:成员变量、成员方法、构造方法、包等等信息也用一个个的Java类来表示。就像一个汽车是一个类,汽车中的发动机、变速箱等等也是一个个独立的类。表示Java类的Class类显然要提供一些方法,来获得其中的变量、方法、构造方法、修饰符、包等等信息,这些信息就是用对应的实例对象来表示,他们是Field、Method、Contructor、Package等。


三、Contructor类

Contructor类代表某个类中的一个构造方法

得到某一个类的所有构造方法:

Constructor [] constructors = Class.forName(“java.lang.String”).getConstructor();//得到String类的所有构造方法

得到某一个类中的某个构造方法:

Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);//得到String类的StringBuffer构造方法

创建实例对象方式:

通常:String str = new String(new StringBuffer("abc"));

反射:String str = (String)constructor.newInstance(new StringBuffer("abc"));

通常一个类中有多个构造方法,一般根据参数类型和个数来区分到底得到其中那个方法。


四、Field类

Field类代表某一个类中的一个成员变量。

Field[] getFields()

Field[] getDeclaredFields()

getFields()返回的是一个包含Field对象的数组,这个 对象记录了包含这个类或者超类共有的字段。

getDeclaredFields()也将返回包含Field对象的数组,这些对象记录了这个类的全部字段(包括私有的)。如果类中没有字段,或者Class对象描述的是基本类型或者数组类型,这些方法将返回一个长度为0的数组。


五、Method类

Method[] getMethods()

Method[] getDeclaredMethods()

getMethods()将返回所有的共有方法,包括从超类继承的共有方法。getDeclaredmethod()返回这个类或者接口的全部方法,但不包括由超类继承了的方法。

例如:

获取String类中的charAt()方法

Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class);

调用方法:

普通调用方式:System.out.println(str.charAt(1));

反射方法;System.out.println(charAt.invoke(str,1));

注意传入的参数都是用Class对象来表示。


六、数组的反射

具有相同维数和元素类型的数组属于同一种类型,即具有相同的Class实例对象。

代表数组的Class实例对象的getSuperClass()方法返回的父类为Object类对应的Class。

基本类型的一维数组可以被当做Object类型使用,不能当做Object[]类型使用;非基本类型的一维数组,既可以当做Object类型使用,又可以当做Object[]类型使用


七、反射的作用是实现框架功能

1、框架与框架要解决的核心问题

框架就好比造汽车,需要先有汽车的大概样式,生产处汽车的整体外壳,然后由汽车生产商在外壳上面装上发动机,座椅等等东西,这个外盒就是框架,生产商可以根据使用将发动机,座椅等等装入外壳内。

框架是调用用户提供的类。工具类是被用户的类调用。

2、框架要解决的核心问题

框架要解决的问题就好比,现在有一个汽车外壳,但是发动机,座椅等等还没有制造出来,因此需要等到具体的发动机、座椅等等制造出来才能够调用框架。


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

详细请查看:www.itheima.com

0 0
原创粉丝点击