您的位置:首页 > 编程语言 > Java开发

Java反射机制梳理(一)

2016-02-27 11:13 417 查看
         至于什么是反射,利用反射技术有什么好处,在这里文章中有一个详细的介绍了。具体可以查看公共技术点之 Java 反射 Reflection
下面梳理一下,在复习研究反射机制中,遇到的知识点:

(一).获取对象(3中方式)

    1.通过类的完整路径来获取对象

Class demo1 = Class.forName("com.fangdingjie.bean.Book");
    2.通过实例化来获取对象

Book book = new Book();
Object ob = book;
Class demo2 = ob.getClass();
   3直接类名称.class获取对象
Class demo3 = Book.class;

 (二).获取对象属性

/**
* 该方法用于获取传递过来的属性以及属性对应的值
* @param ob
*/
public void show(Object ob) {
// 获得传递过来的对象
Class cl = ob.getClass();
// 获得对应的属性集合
Field[] fi = cl.getDeclaredFields();
try {
for (Field ff : fi) {
ff.setAccessible(true);
//获取私有属性的时候要先开启访问权限。否则会报错
System.out.println("属性" + ff.getName() + ",对应的值:" + ff.get(ob));
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
(三).获取对象中的方法以及调用

    1  .获取方法以及参数

/**
* 该方法用于返回 获取对象的所有方法,返回值类型以及参数信息
* @param ob
*/
public void show(Object ob){
Class cl = ob.getClass();
Method [] method = cl.getDeclaredMethods();
for(Method m:method){

//获取方法的参数,返回的是一个Class类型的数组
Class [] paramCl = m.getParameterTypes();
System.out.println("方法名"+m.getName()+",返回值类型"+m.getReturnType()+",方法修饰值"+m.getModifiers());

}
}
   2.方法的调用。

//该方法用于传递过来的实体对象方法的调用
public void showUser(Object ob){
Class cl = ob.getClass();
try {
Method mt = cl.getMethod("getName", null);
System.out.println("方法名"+mt.getName());
//invoke位调用该方法
mt.invoke(ob, new Object[0]);

//调用有带1个参数的方法
Method mt1 = cl.getMethod("setName", String.class);
mt1.invoke(ob, "Android疯狂讲义");

//调用多个参数的方法

Class [] cll = {String.class,int.class};
Method mt2 = cl.getMethod("test", cll);
Object [] object = {"test",154};
mt2.invoke(ob, object);

} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
        以上为反射的基础知识,只是做为个人备忘。大神勿喷。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  反射 java android