1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
1.通过一个对象获得完整的包名和类名 (注:所有类的对象其实都是Class的实例) Demo demo = new Demo(); demo.getClass().getName(); 2.实例化Class类对象
Class<?> demo1 = Class.forName("Reflect.Demo"); Class<?> demo2 = new Demo().getClass(); Class<?> demo3 = Demo.class; 3.通过Class实例化其他类的对象 Class<?> clazz = Class.forName("Reflect.Person"); Person per = (Person)clazz.newInstance(); 4.通过Class调用其他类中的构造函数 Class<?> clazz = Class.forName("Reflect.Person");
Constructor<?> cons[] = clazz.getConstructors(); Person per1 = (Person)cons[0].newInstance("Rollen"); Person per2 = (Person)cons[1].newInstance(20); Person per3 = (Person)cons[2].newInstance("Rollen",20); 5.返回一个类实现的接口: Class<?> clazz = Class.forName("Reflect.Person");
Class<?> intes[] = clazz.getInterfaces(); intes[0].getName(); 6.取得其他类中的父类 Class<?> clazz = Class.forName("Reflect.Person");
Class<?> temp = clazz.getSuperclass(); 7.获得其他类中的全部构造函数 Class<?> clazz = Class.forName("Reflect.Person"); Constructor<?> cons[] = clazz.getConstructors(); for(int i=0;i<cons.length;i++){ System.out.println("构造方法:"+cons[i]); } 8.取得本类的属性 Class<?> clazz = Class.forName("Reflect.Person");
Field[] field = clazz.getDeclaredFields(); for(int i=0;i<field.length;i++){ int mo = field[i].getModifiers(); String priv = Modifier.toString(mo); Class<?> type = field[i].getType(); }
Field[] field1 = clazz.getFields(); for(int j=0;j<freld1.length;j++){ int mo = filed1[j].getModifiers(); String priv = Modifier.toString(mo); Class<?> type = field1[i].getType(); } 9.调用类中的方法
Class<?> clazz = Class.forName("Reflect.Person"); Method method = clazz.getMethod("sayChina"); method.invoke(clazz.newInstance());
method = clazz.getMethod("sayHello",String.class); method.invoke(clazz.newInstance(),"Rollen",20);
|
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏