反射调用 java_Java基础反射-调用类

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值