Java 反射 调用 demo
2017-12-16 15:39
239 查看
基础类.供demo反射练习
反射demo类
通过反射.绕开泛型
package fanshe; public class Person { public String name; private String age; private int p; public Person() {}; public Person(String name, String age) { super(); this.name = name; this.age = age; } private Person(String name, String age,int p) { super(); this.name = name; this.age = age; this.p = p; } public String getName() { return name; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]" + "p -"+ p; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
反射demo类
package fanshe; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class demo1 { public static void main(String[] args) { // TODO Auto-generated method stub try { d_3(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } private static void d_1() { Person p = new Person(); Class c = p.getClass(); } private static void d_2() { Class c = Person.class; System.out.println(c); } private static void d_3() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException { Class c = Class.forName("fanshe.Person"); //--------------------------// Constructor con = c.getConstructor(); //获得 空参数的构造器 public Object o= con.newInstance(); //运行获取到的构造方法 System.out.println(o.toString()); //--------------------------// Constructor con2 = c.getConstructor(String.class,String.class); //获得带有参数的构造方法 public Object o2 = (Person)con2.newInstance("a","22"); System.out.println(o2.toString()); //--------------------------// Constructor con3 = c.getDeclaredConstructor(String.class,String.class,int.class); //获得带有参数的构造方法 private con3.setAccessible(true); Object o3 = (Person)con3.newInstance("a","22",14); System.out.println(o3.toString()); //--------------------------// Object tmp_obj = c.newInstance(); Field f_name = c.getField("name");//获得成员变量 public f_name.set(tmp_obj, "abc"); //设置变量 System.out.println(tmp_obj); //--------------------------// Field f_age = c.getDeclaredField("age");//获得成员变量 public System.out.println(f_age); //--------------------------// Method m_getName = c.getMethod("getName"); //获得类函数无参数 public Object o1 = m_getName.invoke(tmp_obj); //运行getName方法.返回值 反给obj System.out.println(o1); //--------------------------// Method m_setName = c.getMethod("setName",String.class); m_setName.invoke(tmp_obj,"abcdqweqwe"); System.out.println(tmp_obj.toString()); } }
通过反射.绕开泛型
ArrayList<String> arr = new ArrayList<String>(); arr.add("a"); Class carr = arr.getClass(); Method arr_add = carr.getMethod("add",Object.class); arr_add.invoke(arr, 1); arr_add.invoke(arr, 2); arr_add.invoke(arr, 3); arr_add.invoke(arr, 4); System.out.println(arr);
相关文章推荐
- java如何使用反射调用类中的方法
- Java 反射机制(反射调用成员方法)
- Java调用private方法—Java中的类反射机制
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- 如何使用Java的反射机制以及调用构造方法?
- 关于JAVA反射中调用注入bean执行报InvocationTargetException错误
- java反射调用配置文件构造类对象,使用其方法
- 【JAVA】利用反射调用不同方法,减少重复代码
- 一个小java反射程序,简单的调用方法。
- java反射应用--调用方法与访问属性
- Java反射之方法反射demo
- java 反射和暴力反射 两个DEMO
- java反射获取类实例并调用私有方法
- java methodhandle--反射升级版方法句柄demo
- JAVA反射示例四——结合代理模式的远程方法调用事例
- 比FastMethod更快的Java反射调用API,以及比Cglib更快的BeanMap实现
- Java 反射调用静态方法
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- java 反射调用Java类的私有set和get方法
- Java调用uploadify实现文件上传Demo实现