java 反射 调用

  反射是JDK1.5之后的特性,之前一直有碰到,今天特意来回顾下。

try {
Class<?> c = Class.forName("com.zy.TestRClass");
// 1.通过反射获取对象实例,一般使用无参构造器或者有参构造器
// 1.1 无参方式 利用默认无参构造方法的方式获取实例(此时,需自己提供public的无参构造方法   1.无参  2.非private)
TestRClass o = (TestRClass) c.newInstance();

// 1.2 有参方式 利用构造器的方式获取实例
Constructor<?>[] cs = c.getConstructors();
// 有两个构造方法,第一个是无参,第二个 id+name的构造,这里使用的是第二个构造方法
TestRClass o2 = (TestRClass) cs[1].newInstance(100,"zhangsan");

// 2.获取类的属性、属性值、方法
// 2.1 获取实例的属性(变量)
Field[] fs = c.getDeclaredFields();
// c.getDeclaredField("id"); //获取指定的id的属性
for(int i=0 ; i < fs.length ; i++){
Field f = fs[i];

Class<?> clazz = f.getType();
System.out.println("属性类型是:" + clazz.getName() + " 属性名是:" + f.getName());
}

// 2.2 获取实例的属性值(变量值)
String name = o2.getName();
Integer id = o2.getId();
System.out.println("实例的id:" + id +" name:" + name);

// 2.3 获取实例的方法
Method[] mts = c.getDeclaredMethods();
for(int i=0 ; i < mts.length ; i++){
Method m = mts[i];
System.out.println(m.getName());
}


} catch (Exception e) {
e.printStackTrace();
}

这里只列举了一些常用的,还有很多就没一一列举了,比如获取访问修饰符、获取父类、实现的接口的方法等




posted @ 2016-04-11 22:32  Bug开发攻城狮  阅读(66)  评论(0编辑  收藏  举报