Java中的反射

来源:互联网 发布:山东大学网络教育官网 编辑:程序博客网 时间:2024/05/01 06:18

反射(Reflect)就是把Java类中的各种成分映射成相应的Java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成部分:成员变量,方法,构造方法,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速箱等等也是一个个类。

表示Java类的Class类显然要提供一系列的方法,来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,它们就是FieldMethodConstructorPackage等等。

 

l  构造方法的反射应用

 

下面来用反射机制实现下面这行代码

 

String str1 = new String(new StringBuffer("abc"));

 

如下:

Constructor constructor = String.class.getConstructor(StringBuffer.class); //得到某一个构造方法

String str2 = (String) constructor.newInstance(new StringBuffer("abc")); //创建实例对象

System.out.println(str2);

 

l  成员变量的反射应用

 

 

l  成员方法的反射应用

 

Method methodCharAt = String.class.getMethod("charAt", int.class);

System.out.println(methodCharAt.invoke(str1, 1));

 

l  数组与Object的关系及其反射类型

int [] a1 = new int[]{1,2,3};

int [] a2 = new int[4];

int[][] a3 = new int[2][3];

String [] a4 = new String[]{"a","b","c"}; 

Object aObj1 = a1;

Object aObj2 = a4;

//Object[] aObj3 = a1;Object[]数组中的元素是Objectint []数组中的元素是int。这两个就不能划等号了

Object[] aObj4 = a3;

Object[] aObj5 = a4;

System.out.println(Arrays.asList(a1));//显示不正常

System.out.println(Arrays.asList(a4));  //调用List Arrays.asList(Object[] a)Object[] a=a4,所以可以调用

 

l  数组的反射应用(Array()

举例:

原创粉丝点击