先看看书上怎么说的
据我了解反射原理在java框架里面大量被使用,例如spring但是我也没看spring源码不知其实现过程,现在也就简单学习一下吧。基本的东西:
package com.reflect.exercise;
public class Apple {
public int weight =6 ;
public String adress = "japan";
public void testApple(){
System.out.println("testApple start");
}
}
写一个类
用反射来操作它:
package com.reflect.exercise;
import java.lang.reflect.Field;
import javassist.Modifier;
public class ReflectCalss {
public static void main(String[] args) throws ClassNotFoundException {
Apple a = new Apple();
//反射获取名称
System.out.println(a.getClass().getName());
//三种获取class 的对象的方式
Class c1 = Apple.class;
System.out.println(c1);
Class c2 = a.getClass();
System.out.println(c2);
Class c3 = c1.forName("com.reflect.exercise.Apple");
//调用类的方法,不用new方法
try {
Apple an = (Apple) c3.newInstance();
an.testApple();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取类的属性
Field [] field = c3.getDeclaredFields();
System.out.println(field);
//循环把属性拿出来
for(int i = 0 ;i<field.length;i++){
//拿到属性的名称
System.out.println(field[i].getName());
//获取属性类型
System.out.println(field[i].getType());
//权限修饰符
int mo = field[i].getModifiers();
String priv = Modifier.toString(mo);
System.out.println(priv);
}
}
}
操作数组:
package com.reflect.exercise;
import java.lang.reflect.Array;
public class TestReflect {
public static void main(String[] args) throws Exception {
int[] temp = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] newTemp = (int[]) arrayInc(temp, 15);
print(newTemp);
String[] atr = { "a", "b", "c" };
String[] str1 = (String[]) arrayInc(atr, 8);
print(str1);
}
// 修改数组大小
public static Object arrayInc(Object obj, int len) {
Class<?> arr = obj.getClass().getComponentType();
Object newArr = Array.newInstance(arr, len);
int co = Array.getLength(obj);
System.arraycopy(obj, 0, newArr, 0, co);
return newArr;
}
// 打印
public static void print(Object obj) {
Class<?> c = obj.getClass();
if (!c.isArray()) {
return;
}
System.out.println("数组长度为: " + Array.getLength(obj));
for (int i = 0; i < Array.getLength(obj); i++) {
System.out.print(Array.get(obj, i) + " ");
}
System.out.println();
}
}
参考地址:
http://baike.xsoftlab.net/view/209.html#3_1 (感觉这个人写的很全面也很好了)
书上面还有反射和泛型的使用,反射和javabean之间的使用,有机会了解一下在写了