反射:解刨类的构造函数和创建类的对象
那么就实例来看看:
1 反射:解刨类的构造函数和创建类的对象 2 那么就实例来看看: 3 /* 4 * Person 类 5 */ 6 package t1.no3; 7 8 public class Person { 9 public String name="aaa"; 10 private int age=31; 11 private static int pwd=123; 12 public Person(){ 13 System.out.println("Person的无参的构造函数"); 14 } 15 public Person(String name){ 16 System.out.println("Person的无有参的构造函数,name: "+name); 17 } 18 public Person(String name,int pwd,int age){ 19 System.out.println(name+","+pwd+","+age); 20 } 21 private Person(int age,String name){ 22 System.out.println(name+","+age); 23 } 24 public void say(){ 25 System.out.println("hello"); 26 } 27 public void say(String name){ 28 System.out.println("hello name:"+name); 29 } 30 private void says(String name){ 31 System.out.println("hello name:"+name); 32 } 33 public static void sayss(){ 34 System.out.println("这是个静态的方法"); 35 } 36 } 37 /* 38 *反射实例 39 */ 40 package t1.no3; 41 42 import java.lang.reflect.Constructor; 43 import java.lang.reflect.Field; 44 import java.lang.reflect.Method; 45 46 import org.junit.Test; 47 48 public class Demo4 { 49 //反射public Person()构造函数 50 @Test 51 public void test1() throws Exception{ 52 Class clazz=Class.forName("t1.no3.Person");//反射类 53 Constructor c=clazz.getConstructor(null);//反射构造函数 54 Person pp= (Person) c.newInstance(null);//创建对象 55 System.out.println(pp.name); 56 } 57 //反射public Person(String name)构造函数 58 @Test //JUnit测试 59 public void test2() throws Exception{ 60 Class clazz=Class.forName("t1.no3.Person");//反射类 61 Constructor c=clazz.getConstructor(String.class); 62 Person pp=(Person) c.newInstance("XXXXXXXX"); 63 System.out.println(pp.name); 64 } 65 //反射public Person(String name,int pwd,int age)构造函数 66 @Test 67 public void test3() throws Exception{ 68 Class clazz=Class.forName("t1.no3.Person");//反射类 69 Constructor c=clazz.getConstructor(String.class,int.class,int.class); 70 Person pp=(Person) c.newInstance("XXXXXXXX",123456,30); 71 System.out.println(pp.name); 72 } 73 //反射private Person(int age,String name)构造函数 74 @Test 75 public void test4() throws Exception{ 76 Class clazz=Class.forName("t1.no3.Person");//反射类 77 Constructor c=clazz.getDeclaredConstructor(int.class,String.class);//反射私有的构造函数 78 c.setAccessible(true);//强暴执行 79 Person pp=(Person) c.newInstance(30,"XXXXXXXX");//实例化对象 80 System.out.println(pp.name); 81 } 82 //反射public void say()方法 83 @Test 84 public void test5() throws Exception{ 85 Person pp=new Person(); 86 Class clazz=Class.forName("t1.no3.Person"); 87 Method mm=clazz.getMethod("say", null);//反射方法 88 mm.invoke(pp, null);//执行方法 89 } 90 //反射public void say(String name)方法 91 @Test 92 public void test6() throws Exception{ 93 Person pp=new Person(); 94 Class clazz=Class.forName("t1.no3.Person"); 95 Method mm=clazz.getMethod("say", String.class); 96 mm.invoke(pp, "XXXXXX"); 97 } 98 //反射private void says(String name)方法 99 @Test 100 public void test7() throws Exception{ 101 Person pp=new Person(); 102 Class clazz=Class.forName("t1.no3.Person"); 103 Method mm=clazz.getDeclaredMethod("say", String.class); 104 mm.setAccessible(true); 105 mm.invoke(pp, "XXXXXX"); 106 } 107 //反射public static void sayss()方法 108 @Test 109 public void test8() throws Exception{ 110 Person pp=new Person(); 111 Class clazz=Class.forName("t1.no3.Person"); 112 Method mm=clazz.getMethod("sayss", null); 113 mm.invoke(null, null); 114 } 115 //反射public String name="aaa"; 116 @Test 117 public void test9() throws Exception{ 118 Person pp=new Person(); 119 Class clazz=Class.forName("t1.no3.Person"); 120 Field fl=clazz.getField("name");//反射字段名称 121 System.out.println(fl.get(pp)); 122 } 123 //反射private int age=31; 124 @Test 125 public void test10() throws Exception{ 126 Person pp=new Person(); 127 Class clazz=Class.forName("t1.no3.Person"); 128 Field fl=clazz.getDeclaredField("age");//反射私有字段名称 129 fl.setAccessible(true);//强制执行 130 System.out.println(fl.get(pp)); 131 } 132 //反射private static int pwd=123; 133 @Test 134 public void test11() throws Exception{ 135 //Person pp=new Person(); 136 Class clazz=Class.forName("t1.no3.Person"); 137 Field fl=clazz.getDeclaredField("pwd"); 138 fl.setAccessible(true);//强制执行 139 System.out.println(fl.get(null));//static静态的字段,这里可以field.get(null) 140 } 141 }