后台输出:
[java] view plain copy************获取所有公有的字段******************** public java.lang.string fanshe.field.student.name ************获取所有的字段(包括私有、受保护、默认的)******************** public java.lang.string fanshe.field.student.name protected int fanshe.field.student.age char fanshe.field.student.sex private java.lang.string fanshe.field.student.phonenum *************获取公有字段**并调用*********************************** public java.lang.string fanshe.field.student.name 验证姓名:刘德华 **************获取私有字段****并调用******************************** private java.lang.string fanshe.field.student.phonenum 验证电/话:student [name=刘德华, age=0, sex=
由此可见调用字段时:需要传递两个参数:object obj = stuclass.getconstructor().newinstance();//产生student对象--》student stu = new student();
//为字段设置值
f.set(obj, 刘德华);//为student对象中的name属性赋值--》stu.name = 刘德华
第/一个参数:要传入设置的对象,第二个参数:要传入实参4、获取成员方法并调用student类:[java] view plain copy<span style=font-size:14px;>package fanshe.method; public class student { //**************成员方法***************// public void show1(string s){ system.out.println(调用了:公有的,string参数的show1(): s = + s); } protected void show2(){ system.out.println(调用了:受保护的,无参的show2()); } void show3(){ system.out.println(调用了:默认的,无参的show3()); } private string show4(int age){ system.out.println(调用了,私有的,并且有返回值的,int参数的show4(): age = + age); return abcd; } } </span>
测试类:[java] view plain copy<span style=font-size:14px;>package fanshe.method; import java.lang.reflect.method; /* * 获取成员方法并调用: * * 1.批量的: * public method[] getmethods():获取所有公有方法;(包含了父类的方法也包含object类) * public method[] getdeclaredmethods():获取所有的成员方法,包括私有的(不包括继承的) * 2.获取单个的: * public method getmethod(string name,class<?>... parametertypes): * 参数: * name : 方法名; * class ... : 形参的class类型对象 * public method getdeclaredmethod(string name,class<?>... parametertypes) * * 调用方法: * method --> public object invoke(object obj,object... args): * 参数说明: * obj : 要调用方法的对象; * args:调用方式时所传递的实参; ): */ public class methodclass { public static void main(string[] args) throws exception { //1.获取class对象 class stuclass = class.forname(fanshe.method.student); //2.获取所有公有方法 system.out.println(***************获取所有的”公有“方法*******************); stuclass.getmethods(); method[] methodarray = stuclass.getmethods(); for(method m : methodarray){ system.out.println(m); } system.out.println(***************获取所有的方法,包括私有的*******************); methodarray = stuclass.getdeclaredmethods(); for(method m : methodarray){ system.out.println(m); } system.out.println(***************获取公有的show1()方法*******************); method m = stuclass.getmethod(show1, string.class); system.out.println(m); //实例化一个student对象 object obj = stuclass.getconstructor().newinstance(); m.invoke(obj, 刘德华); system.out.println(***************获取私有的show4()方法******************); m = stuclass.getdeclaredmethod(show4, int.class); system.out.println(m); m.setaccessible(true);//解除私有限定 object result = m.invoke(obj, 20);//需要两个参数,一个是要调用的对象(获取有反射),一个是实参 system.out.println(返回值: + result); } } </span>
西安飞凡网络技术咨询有限公司
400 011 2010
