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