反射获取类属性和方法的调用
2017-09-12 11:05
176 查看
package io.stream; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectTest { public static void main(String[] args) { // test1(); // test2(); // test3(); // test4(); // test5(); // test6(); test7(); } private static void test7() { // 得到并调用指定的方法(带参数) Class<?> cl; try { cl = Class.forName("io.stream.Student"); Object obj = cl.newInstance(); Class<?>[] paras={String.class,int.class}; Method me=cl.getDeclaredMethod("sayHello", paras);//得到方法 Object[] val={"dd",2};//把参数存进数组,参数数组为Object类型 Object objval = me.invoke(obj, val);//执行带参数的方法 System.out.println(objval);//输出返回值 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void test6() { // 得到并调用指定的方法 try { Class<?> cl = Class.forName("io.stream.Student"); Object obj = cl.newInstance(); Method me = cl.getMethod("sayHi", null);// 得到方法 Object objval = me.invoke(obj, null);// 执行方法,普通方法执行用invoke System.out.println(objval);// 得到执行方法的返回值 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void test5() { // 得到所有的方法 try { Class<?> cl = Class.forName("io.stream.Student"); Method[] me = cl.getDeclaredMethods(); for (Method m : me) { System.out.println(m.getName() + "\t" + m.getTypeParameters() + "\t" + m.getReturnType().getName() + "\t" + Modifier.toString(m.getModifiers())); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void test4() { // 得到并调用带参的构造方法 try { Class<?> cl = Class.forName("io.stream.Student"); Constructor<?> c = cl.getDeclaredConstructor(String.class, String.class, int.class);//得到构造方法 Object obj = c.newInstance("01", "王安石", 40);//构造方法执行用newInstance方法 // System.out.println("ff"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void test3() { // 得到并调用无参构造方法 try { Class<?> cl = Class.forName("io.stream.Student"); Constructor<?>[] con = cl.getDeclaredConstructors(); System.out.println(con.length); Constructor<?> c = cl.getDeclaredConstructor(null);// 得到无参构造方法 Object obj = c.newInstance(null);// 新建一个实例 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void test2() { // TODO Auto-generated method stub Class cl; try { cl = Class.forName("io.stream.Student"); Object obj = cl.newInstance(); Field f = cl.getDeclaredField("stuName"); f.setAccessible(true);//设置私有的可以访问 f.set(obj, "李商隐"); System.out.println(f.get(obj)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void test1() { // TODO Auto-generated method stub try { Class<?> cl = Class.forName("io.stream.Student"); // Object obj=cl.getInterfaces(); Field[] fl = cl.getDeclaredFields();//得到属性(字段) for (Field f : fl) { System.out.println(f.getName() + "\t" + f.getType() + "\t" + f.getModifiers() + "\t" + Modifier.toString(f.getModifiers())); } Field f = cl.getDeclaredField("stuid"); System.out.println(f.getName() + "\t" + f.getType() + "\t" + f.getModifiers() + "\t" + Modifier.toString(f.getModifiers())); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- java 通过反射获取调用类方法及属性
- java 通过反射获取调用类方法及属性
- java 通过反射获取调用类方法及属性
- C#反射新建类实例和调用类方法及属性帮助类 以及获取或设置对象属性中字段值帮助类
- 测试 java反射Reflection中 获取 类属性、方法、构造方法及 调用类方法改变 对象属性
- 通过反射获取类属性字段 以及 调用类方法
- java反射获取类实例并调用私有方法
- Java反射:根据方法名动态调用方法,解决商品动态属性取值问题。
- Java反射——获取私有属性及方法
- java通过反射获取调用变量以及方法
- JAVA反射获取类名,方法名,属性及构造方法
- Java 反射技术三:调用其构造函数、方法、获取属性值
- java反射应用--调用方法与访问属性
- 使用反射调用私有属性和方法
- java反射调用私有方法和修改私有属性
- 反射第四步 : 通过反射获取某一个类的 方法 并通过反射调用
- 反射获取属性和方法
- Java反射特性--获取其他类实例并调用其方法
- iOS反射机制,获取方法名和描述属性
- Java记录 -88- 利用反射机制调用对象的私有方法和属性