[java]反射1

来源:互联网 发布:台视网络直播 编辑:程序博客网 时间:2024/06/16 11:54

很多东西的实现基础,都是反射,spring的AOP,动态代理等等,下面咱们来学习一下Java的反射

什么是反射?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

反射可以做什么?

反射机制主要提供了以下功能:

在运行时判断任意一个对象所属的类;

在运行时构造任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法;

在运行时调用任意一个对象的方法;

生成动态代理。

java有哪些反射类?

java.lang.Class;
java.lang.reflect.Constructor; java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;

java如何实现反射?

通过反射实例化一个类的对象

    public class reflecetTest {        public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {            Class<?> test = null;            test=Class.forName("com.reflect.Test.Person");            //第一种方法,实例化默认构造方法,调用set赋值            Person person= (Person) test.newInstance();            person.setName("小明");            person.setAddress("建国路");            //第二种方法,取得全部的构造函数,使用构造函数赋值            Constructor<?> constructor[]=test.getConstructors();            //查看每个构造方法需要的参数            for (int i = 0;i<constructor.length;i++){                Class<?> clazzs[]=constructor[i].getParameterTypes();                System.out.println("constructor["+i+"](");                if (clazzs.length > 0){                    for (int j=0; j<clazzs.length;j++){                        if (j == clazzs.length -1 )                            System.out.println(clazzs[j].getName());                        else                            System.out.println(clazzs[j].getName()+",");                    }                }                System.out.print(")");            }           // person = (Person) constructor[0].newInstance("张三");            System.out.println(person);        }    }

取得一个类的全部属性

    public class ReflectTest implements Serializable{        public static void main(String[] args) throws ClassNotFoundException {            Class<?> clazz = Class.forName("com.reflect.Test.Person");            System.out.println("===========本类属性=============");            Field[] fields = clazz.getDeclaredFields();            for (int i =0; i<fields.length;i++){                //权限修饰符                int meth = fields[i].getModifiers();                String priv = Modifier.toString(meth);                //属性类型                Class<?> type = fields[i].getType();                System.out.println(priv +" "+type.getName() + " " + fields[i].getName() + ";");            }            System.out.println("=======实现的接口或者父类的属性=========");            //取得实现的接口或者父类的属性            Field[] fields1=clazz.getFields();            for (int j = 0; j<fields1.length; j++){                //权限修饰符                int meth = fields1[j].getModifiers();                String priv = Modifier.toString(meth);                //属性类型                Class<?> type = fields1[j].getType();                System.out.println(priv + " " +type.getName() + " "+fields1[j].getName() + ";");            }        }    }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子晚上学习困怎么办 小孩子容易兴奋激动怎么办 中考时过度兴奋怎么办 小孩兴奋不睡觉怎么办 孩子突然反常不听话怎么办? 婴儿亢奋不睡觉怎么办 宝宝听力筛查没通过怎么办 7个多月宝宝缺钙怎么办 暑假孩子天天看电视怎么办 移植后天天便秘怎么办 天天拉屎还便秘怎么办 孩子不爱吃鸡蛋怎么办 孩子看书没耐心怎么办 5岁宝宝鼻炎怎么办 手术后认知障碍怎么办 孩子很调皮好动怎么办 学生打家长该怎么办 老师打学生家长该怎么办 三岁儿子多动症怎么办 小孩一直缺锌怎么办 宝宝严重缺锌怎么办 儿童缺钙缺锌怎么办 怀孕前期喝酒了怎么办 怀孕之前喝酒了怎么办 怀孕后喝酒了怎么办 刚怀孕喝啤酒怎么办 早孕期间喝酒了怎么办 发现怀孕一个月怎么办 怀孕初期喝白酒怎么办 准备怀孕喝酒了怎么办 怀孕初期喝醉了怎么办 怀孕前喝酒了怎么办 受孕期间喝酒了怎么办 一个月发现怀孕怎么办 上课不专心老师怎么办 小孩子上课不专心怎么办 孩子好动不专心怎么办 一年级上课不听讲怎么办 小孩不专心听讲怎么办 小孩上课不集中怎么办 一年级上课不专心怎么办