標籤:返回 pac cto targe 泛型 this setname method override
基礎類.供demo反射練習
1 package fanshe; 2 3 public class Person { 4 public String name; 5 private String age; 6 private int p; 7 public Person() {}; 8 public Person(String name, String age) { 9 super();10 this.name = name;11 this.age = age;12 }13 private Person(String name, String age,int p) {14 super();15 this.name = name;16 this.age = age;17 this.p = p;18 }19 public String getName() {20 return name;21 }22 @Override23 public String toString() {24 return "Person [name=" + name + ", age=" + age + "]" + "p -"+ p;25 }26 public void setName(String name) {27 this.name = name;28 }29 public String getAge() {30 return age;31 }32 public void setAge(String age) {33 this.age = age;34 }35 }
反射demo類
1 package fanshe; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Field; 5 import java.lang.reflect.InvocationTargetException; 6 import java.lang.reflect.Method; 7 8 public class demo1 { 9 10 public static void main(String[] args) {11 // TODO Auto-generated method stub12 try {13 d_3();14 } catch (Exception e) {15 // TODO: handle exception16 e.printStackTrace();17 }18 }19 20 private static void d_1() {21 Person p = new Person();22 Class c = p.getClass();23 24 }25 26 private static void d_2() {27 Class c = Person.class;28 System.out.println(c);29 }30 private static void d_3() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {31 Class c = Class.forName("fanshe.Person");32 33 //--------------------------//34 Constructor con = c.getConstructor(); //獲得 空參數的構造器 public35 Object o= con.newInstance(); //運行擷取到的構造方法36 System.out.println(o.toString());37 38 //--------------------------//39 Constructor con2 = c.getConstructor(String.class,String.class); //獲得帶有參數的構造方法 public40 Object o2 = (Person)con2.newInstance("a","22");41 System.out.println(o2.toString());42 43 //--------------------------//44 45 Constructor con3 = c.getDeclaredConstructor(String.class,String.class,int.class); //獲得帶有參數的構造方法 private46 con3.setAccessible(true);47 Object o3 = (Person)con3.newInstance("a","22",14);48 System.out.println(o3.toString());49 50 //--------------------------//51 Object tmp_obj = c.newInstance();52 Field f_name = c.getField("name");//獲得成員變數 public53 f_name.set(tmp_obj, "abc"); //設定變數54 System.out.println(tmp_obj);55 56 //--------------------------//57 Field f_age = c.getDeclaredField("age");//獲得成員變數 public58 System.out.println(f_age);59 60 //--------------------------//61 Method m_getName = c.getMethod("getName"); //獲得類函數無參數 public62 Object o1 = m_getName.invoke(tmp_obj); //運行getName方法.傳回值 反給obj63 System.out.println(o1);64 65 //--------------------------//66 Method m_setName = c.getMethod("setName",String.class);67 m_setName.invoke(tmp_obj,"abcdqweqwe");68 System.out.println(tmp_obj.toString());69 }70 }
通過反射.繞開泛型
1 ArrayList<String> arr = new ArrayList<String>();2 arr.add("a");3 Class carr = arr.getClass();4 Method arr_add = carr.getMethod("add",Object.class);5 arr_add.invoke(arr, 1);6 arr_add.invoke(arr, 2);7 arr_add.invoke(arr, 3);8 arr_add.invoke(arr, 4);9 System.out.println(arr);
Java 反射 調用 demo