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

java 反射

2015-07-07 13:38 603 查看
写在前面:在面向对象的世界里(普通数据类型和Java静态的东西不是面向对象),万事万物皆对象,类也是对象,是java.lang.Class对的实例对象,它的实例是每一个对象
反射机制:动态加载类:====================Class类的使用=================================Class类的使用:(1)获取类类型 Class:1.类名.class;2.对象.getClass();3.Class c = Class.forName("com.reflect.Word");(2)通过 Word 2 =new  Word();对象,是静态的加载类 ,是在编译时刻需要加载所有可能会用到的类。而通过反射Class c = Class.forName("com.reflect.Word");动态加载类,在运行时加载;Word w = (Word)c.newInstance();通过类类型,创建该类对象。总结:功能性的类使用动态加载(可以有助于程序的设计)(3)基本数据类型,void关键字都存在类类型1.Class c1 = int.class//int 的类类型2.Class c2 = String.class//String 类的类类型3.Class c3 = double.class;4.Class c4 = Double.class;5.Class c5 = void.class;---------要想动态获取类的信息,首先获取该类的类类型-------------(4)通过反射来获取到所有类的方法(public)的信息(方法也是对象 Method类,)Method[] ms = c1.getMethods();//Method对象有其他方法可以获得方法的返回值类型,参数列表类型,方法名,等)(5)通过反射来获取到所有类的成员变量的信息(成员变量也是对象 Field)Field[] fs = c1.getDeclaredFields();(6)获取构造方法的信息(Constructor)Class c =obj.getClass();Constructor[] cs=c.getDeclaredConstructors();//得到自己声明的构造函数=============方法的反射=====================================1)方法的获取(前面已介绍先获取类类型)Method m = c.getMethod(参数名,参数类类型列表数组)2)方法的反射操作;m.invoke(该方法所属类的对象,args)3)通过反射认识泛型的本质//反射的操作都是在编译之后的操作,即运行时的操作//编译之后集合的泛型是去泛型化的,Java中集合的泛型,是防止错误输入的,只在编译阶段有效,绕过编译就无效了例:ArrayList list1 = new ArrayList();ArrayList<String> list2 = new ArrayList<String>();Class c1= list1.getClass();Class c2=list2.getClass();//c1==c2  true;Method m = c2.getMethod("add",Object.class);c2.invoke(list2,1);//绕过编译就绕过了泛型,加入成功
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class 反射 java 类类型