反射

 1 package cn.hello;
 2 
 3 import java.util.Arrays;
 4 
 5 /*反射
 6  * 
 7  * Class类:
 8  *             成员变量:Field
 9  *             构造方法:Constructor
10  *             成员方法:Method
11  * 
12  * 
13  * 获取class文件对象的方式:
14  *             A :Object类的getClass()方法
15  *             B:数据类型的静态属性class
16  *             C Class类中的静态方法
17  * */
18 public class Test01 {
19     public static void main(String[] args) throws ClassNotFoundException {
20         //方式1
21         Student s=new Student();
22         Class c=s.getClass();
23         
24         //方式2
25         Class c2=Student.class;
26         
27         //方式3
28         Class c3=Class.forName("cn.hello.Student");
29         System.out.println(c3==c);
30     }
31 }
 1 package cn.hello;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.util.Arrays;
 5 
 6 /*
 7  * 通过反射获取构造方法并使用
 8  * */
 9 public class Test01 {
10     public static void main(String[] args) throws Exception {    
11         
12         Class c=Class.forName("cn.hello.Student");
13         
14         //获取构造方法
15         //Constructor[] cons=c.getConstructors();
16         Constructor[] cons=c.getDeclaredConstructors();
17         for(Constructor con:cons){
18             System.out.println(con);
19         }
20         Constructor con=c.getConstructor();
21         System.out.println(con);
22         
23         Constructor con2=c.getConstructor(String.class,int.class,String.class);
24         Object obj2=con2.newInstance("haha",22,"world");
25         System.out.println(obj2);
26         
27         Object obj=con.newInstance();
28         System.out.println(obj);             //Student [name=null, age=0, address=null]
29         
30     }
31 }
 1 package cn.hello;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.util.Arrays;
 6 
 7 /*
 8  * 通过反射获取成员变量并使用
 9  * */
10 public class Test01 {
11     public static void main(String[] args) throws Exception {    
12         
13         Class c=Class.forName("cn.hello.Student");
14         
15         Constructor con=c.getConstructor(String.class,int.class,String.class);
16         
17         Object obj=con.newInstance("hello",22,"word");
18         System.out.println(obj);
19     
20         //--------------------------------
21         System.out.println("--------------------");
22         
23         Field addressField=c.getField("address");
24         addressField.set(obj, "北京");
25         System.out.println(obj);
26         System.out.println("----------");
27         Field nameField=c.getDeclaredField("name");      
28         nameField.setAccessible(true);         //name是private修饰的,所以要暴力访问
29         nameField.set(obj,"阿光");
30         System.out.println(obj);
31     }
32 }
 1 package cn.hello;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 import java.util.Arrays;
 7 
 8 /*
 9  * 通过反射获取成员方法并使用
10  * */
11 public class Test01 {
12     public static void main(String[] args) throws Exception {    
13         Class c=Class.forName("cn.hello.Student");
14         
15         //获取所有方法
16         /*Method[] methods=c.getMethods();     //获取自己的公共方法和父亲的公共方法
17         Method[] methods1=c.getDeclaredMethods();    //获取自己所有的方法
18         for(Method m:methods){
19             System.out.println(m);
20         }*/
21         
22         //获取单个方法并使用
23         Constructor con=c.getConstructor();
24         Object obj=con.newInstance();
25         
26         Method m1=c.getMethod("show");
27         // public Object invoke(Object obj ,Object obj.....args)   返回值是Object接收,第一个参数表示对象是谁,第二个参数表示调用该方法的实际参数
28         m1.invoke(obj);
29     
30     }
31 }
 1 package cn.hello;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Field;
 5 import java.lang.reflect.Method;
 6 import java.util.Arrays;
 7 
 8 /*
 9  * 通过反射获取成员方法并使用
10  * */
11 public class Test01 {
12     public static void main(String[] args) throws Exception {    
13         Class c=Class.forName("cn.hello.Student");
14         
15         //获取所有方法
16         /*Method[] methods=c.getMethods();     //获取自己的公共方法和父亲的公共方法
17         Method[] methods1=c.getDeclaredMethods();    //获取自己所有的方法
18         for(Method m:methods){
19             System.out.println(m);
20         }*/
21         
22         //获取单个方法并使用
23         Constructor con=c.getConstructor();
24         Object obj=con.newInstance();
25         
26         Method m1=c.getMethod("show");
27         // public Object invoke(Object obj ,Object obj.....args)   返回值是Object接收,第一个参数表示对象是谁,第二个参数表示调用该方法的实际参数
28         m1.invoke(obj);
29         System.out.println("----------");
30         Method m2=c.getMethod("method",String.class);
31         
32         m2.invoke(obj, "hello");
33     }
34 }
 1 package cn.hello;
 2 
 3 import java.io.FileReader;
 4 import java.lang.reflect.Constructor;
 5 import java.lang.reflect.Field;
 6 import java.lang.reflect.Method;
 7 import java.util.Arrays;
 8 import java.util.Properties;
 9 
10 /*
11  * 通过配置文件
12  * */
13 public class Test01 {
14     public static void main(String[] args) throws Exception {    
15         //Class c=Class.forName("cn.hello.Student");
16         
17         //反射
18         //需要有配置文件配合使用
19         //加载配置文件
20         Properties prop=new Properties();
21         FileReader fr=new FileReader("j:\\zf\\zf\\class.txt");
22         prop.load(fr);
23         fr.close();
24         //获取数据
25         String className=prop.getProperty("className");
26         String methodName=prop.getProperty("methodName");
27         
28         //反射
29         Class c=Class.forName(className);
30         
31         Constructor con=c.getConstructor();
32         
33         Object obj=con.newInstance();
34         
35         Method m=c.getMethod(methodName);
36         
37         m.invoke(obj);
38         
39         
40     }
41 }
className=cn.hello.Person
methodName=love

 

posted @ 2015-08-28 20:47  chengling  阅读(155)  评论(0编辑  收藏  举报