Java反射技术初级学习总结

反射机制是Java成为动态语言的一个关键特性,在运行中的Java程序对自身进行检查,或者说“内省”,并能直接操作程序的内部属性,这个机制允许程序在执行时可以通过反射API取得任何一个已知名称的类的信息,并能在执行时改变类的成员变量的内容或执行方法。

反射包:Java.lang.reflect.*  Constructor(构造器)  Method(方法)  Filed(属性)

获得Class对象的三种方法:

(1)通过Class.forName("完整的类名")

如:Class temp=Class.forName("com.xupt.entity.User");

(2)调用某个类的class属性来获取对应的Class对象,

如:Person.class  需要注意的是:需要导包进来

(3)调用对象的getclass()方法。

如:User use=new User();  use.getclass();

 

获取并查看类中的构造方法:

Constructor[] cons=c1.getDeclaredConstructors();
for(Constructor con:cons){
  System.out.println(Arrays.toString(con.getParameterTypes()));  
}

通过构造器来产生对象:

Constructor con=c1.getConstructor(String.class,int.class);
Object obj=con.newInstance("hehe",2);

通过Method来获取类中的所有方法的具体内容:

Method[] methods=c1.getDeclaredMethods();
for(Method method:methods){
  System.out.println(method.getReturnType());//方法的返回值信息
  System.out.println(method.getName());//方法的名称
  System.out.println(Arrays.toString(method.getParameterType()));//方法的参数信息
}

//调用相关的方法
Method m=c1.getDeclaredMethod("cc",int.class);//"cc"为方法名,若是无参,则int.class不需要再写
m.setAccessible(true);//可访问private修饰的方法,让修饰符失效。
m.invoke(obj.newInstance(1));

查看类中的所有属性 

Field[] fields=c1.getDeclaredFields();
for(Field field:fields){
  System.out.println(field.getType());
  System.out.println(field.getName());  
}

  设置属性的话调用相应的setter方法即可

 

posted on 2015-11-30 15:55  Sunny_well  阅读(194)  评论(0编辑  收藏  举报

导航