Student类
1 packagecom.test.wang;2 importjava.lang.reflect.Constructor;3 importjava.lang.reflect.Field;4 importjava.lang.reflect.Method;5 importjava.util.ArrayList;6
7 importcom.test.wang.student.Student;8 public classfanshe {9 public static void main(String[] args)throwsException {10
11 //1.加载class对象
12 Class stuClass= Class.forName("com.test.wang.student.Student");13
14 //2.获取class中的方法15 //2.1.获取成员方法16 //2.1.1.获取Student类中的 testStudent共有方法 一个参数 返回类型 无
17 Method m = stuClass.getMethod("testStudent", String.class);18 //2.1.2.获取Student类中的 intStudent共有方法 一个参数 返回类型 String
19 Method intm = stuClass.getMethod("intStudent", String.class);20 //2.1.3.获取Student类中的 liangStudent共有方法 二个参数 返回类型 String
21 Method liangm = stuClass.getDeclaredMethod("liangStudent", String.class,int.class);22 //2.1.4.获取Student类中的 liangStudent私有方法 二个参数 返回类型 String
23 Method privatem = stuClass.getDeclaredMethod("privateStudent", String.class,int.class);24 //2.2.获取构造方法25 //2.2.1.获取共有的、无参数的构造方法
26 Constructor con = stuClass.getConstructor(null);27 //2.2.2.获取构造方法并调用
28 Constructor dcon = stuClass.getDeclaredConstructor(String.class);29 //2.3.获取字段信息30 //2.3.1.获取共有字段并调用
31 Field publicFiled = stuClass.getField("name");32 //2.3.2.获取字段并调用
33 Field privateFiled = stuClass.getDeclaredField("phoneNum");34 //2.4.反射main方法35 //2.4.1.main方法的反射
36 Method main = stuClass.getMethod("main", String[].class);37
38 //3.获取一个对象********等同于****Student obj = new Student();
39 System.out.println("\n******获取一个对象******");40 Object obj =stuClass.getConstructor().newInstance();41
42 //4.调用方法 有返回类型 在这里实际都是返回Object
43 System.out.println("\n******调用共有、无参数构造方法******");44 m.invoke(obj,"wang");45
46 String num =intm.invoke(obj,"wang").toString();47 String stu = liangm.invoke(obj, "wang",23).toString();48
49 privatem.setAccessible(true);//暴力访问(忽略掉访问修饰符)
50 String privateStu = privatem.invoke(obj, "wang",23).toString();51
52 System.out.println("\n******无参数构造方法的调用******");53 con.newInstance();54
55 System.out.println("\n******默认的构造方法有参数******");56 dcon.setAccessible(true);57 dcon.newInstance("wang");58
59 publicFiled.set(obj, "天宇");60
61 privateFiled.setAccessible(true);62 privateFiled.set(obj, "155*******5");63
64 Student wangstu =(Student)obj;65
66 System.out.println("\n******main方法******");67 main.invoke(null, (Object)new String[]{"a","b","c"});68
69 //返回结果
70 System.out.println("\n******成员方法一个参数******");71 System.out.println(num);72 System.out.println("\n******成员方法二个参数******");73 System.out.println(stu);74 System.out.println("\n******私有成员方法二个参数******");75 System.out.println(privateStu);76 System.out.println("\n******获取共有字段信息******");77 System.out.println("publicFiled:"+wangstu.name);78 System.out.println("\n******获取字段信息、私有的字段信息需要用方法写出来******");79 System.out.println("privateFiled:"+wangstu.toString());80
81 /*
82 * 通过反射越过泛型检查83 */
84 ArrayList strList = new ArrayList();85 strList.add("aaa");86 strList.add("bbb");87 //strList.add(100);88 //获取ArrayList的class对象,反向调用add()方法,添加数据
89 Class ListClass =strList.getClass();90 //获取add()方法
91 Method ListClassMethod = ListClass.getMethod("add", Object.class);92 //调用add()方法
93 ListClassMethod.invoke(strList, 100);94 //遍历集合
95 for(Object o : strList){96 System.out.println(o);97 }98
99 }100 }
测试类
1 packagecom.test.wang.student;2
3 importjava.text.SimpleDateFormat;4 importjava.util.Date;5
6 public classStudent {7 /*
8 * 构造方法9 */
10 Student(String stu){11 System.out.println("默认的构造方法stu="+stu);12 }13 /*
14 * 无参数构造方法15 */
16 publicStudent(){17 System.out.println("调用共有、无参数构造方法执行了。。。");18 }19
20 public voidtestStudent(String name){21 System.out.println("调用共有、一个参数方法执行了。。。姓名:"+name);22 }23
24 publicString intStudent(String name){25 int num =name.length();26 return "姓名:"+name+" 名字长度:"+num;27 }28
29 public String liangStudent(String name,intage){30 return "姓名:"+name+" 年龄:"+age;31 }32
33 private String privateStudent(String name,intage){34 return "姓名:"+name+" 年龄:"+age;35 }36
37 publicString name;38
39 privateString phoneNum;40
41 /**
42 *@returnthe name43 */
44 publicString getName() {45 returnname;46 }47 /**
48 *@returnthe phoneNum49 */
50 publicString getPhoneNum() {51 returnphoneNum;52 }53 @Override54 publicString toString(){55 return "Student [name:"+name+",phoneNum:"+phoneNum+"]";56 }57 public static voidmain(String[] args){58 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
59 System.out.println("main方法执行了。。。");60 System.out.println("当前时间是:"+df.format(newDate()));61 }62 }
控制台输出
******获取一个对象******
调用共有、无参数构造方法执行了。。。
******调用共有、无参数构造方法******
调用共有、一个参数方法执行了。。。姓名:wang
******无参数构造方法的调用******
调用共有、无参数构造方法执行了。。。
******默认的构造方法有参数******
默认的构造方法stu=wang
******main方法******
main方法执行了。。。
当前时间是:2018-07-31 15:12:18
******成员方法一个参数******
姓名:wang 名字长度:4
******成员方法二个参数******
姓名:wang 年龄:23
******私有成员方法二个参数******
姓名:wang 年龄:23
******获取共有字段信息******
publicFiled:天宇
******获取字段信息、私有的字段信息需要用方法写出来******
privateFiled:Student [name:天宇,phoneNum:155*******5]
aaa
bbb
100