Java反射机制梳理(一)

来源:互联网 发布:淘宝一般违规48分申诉 编辑:程序博客网 时间:2024/05/17 03:50
         至于什么是反射,利用反射技术有什么好处,在这里文章中有一个详细的介绍了。具体可以查看公共技术点之 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 blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
        以上为反射的基础知识,只是做为个人备忘。大神勿喷。

0 0