java中的反射简单理解

来源:互联网 发布:sql数据库管理工具 编辑:程序博客网 时间:2024/06/07 13:53

先看看书上怎么说的
这里写图片描述

据我了解反射原理在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之间的使用,有机会了解一下在写了

原创粉丝点击