




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11,1,学习交流PPT,回顾,网络应用的结构IP地址与端口号TCP编程UDP编程,2,学习交流PPT,本章目标,class对象获取class对象的方式反射包(java.lang.reflect)反射的作用,3,学习交流PPT,本章结构,反射,获取class对象,反射包java.lang.reflect,反射的作用,Class.forName()方法,类名.class,Method类,Field类,class对象概念,getClass()方法,Constructor类,4,学习交流PPT,思考,给定一个对象,要求输出这个对象所有的public方法的名称publicstaticvoidprintMethod(Objectobject)给定一个字符串参数,这个参数表示一个类的名字。根据类名,创建该类的一个对象并返回publicstaticObjectcreateObject(StringclassName),5,学习交流PPT,class对象,Customer类是客户的抽象,Customer对象“代表”某个客户,但不是某个客户。抽象一个Customer的过程:,publicclassCustomerprivateStringname;privateintage;privateStringaddress;/使用字符串表示的地址无法正确的表示地址publicCustomer(Stringname,intage,Stringaddress)=name;this.age=age;this.address=address;/省略set、get方法,6,学习交流PPT,class对象,将address单独封装成一个类Address,publicclassAddressprivateStringprovince;privateStringcity;privateStringstreet;privateintcode;publicAddress(Stringprovince,Stringcity,Stringstreet,intcode)vince=province;this.city=city;this.street=street;this.code=code;/省略set、get方法,7,学习交流PPT,class对象,将Customer的address属性的类型换成Address类型,publicclassCustomerprivateStringname;privateintage;privateAddressaddress;/将String类型转换成Address类型publicCustomer(Stringname,intage,Addressaddress)=name;this.age=age;this.address=address;/省略set、get方法,8,学习交流PPT,class对象,如果想抽象一个Class的信息,那么我们如下来抽象:类中有许多构造函数,有许多方法,有许多成员变量,publicclassClazz/构造方法privateStringconstrutctors;/字符串无法充分表示的表示构造方法的信息/方法privateStringmethods;/字符串无法充分的表示方法/成员变量privateStringfields;/字符串无法充分的表示成员变量的信息publicClazz(Stringconstrutctors,Stringmethods,Stringfields)super();this.construtctors=construtctors;this.methods=methods;this.fields=fields;/省略set、get方法,9,学习交流PPT,class对象-1,字符串无法充分的表达各种成员,那么就各成员再次进行抽象,/将Clazz中的各成员对象进行抽象classConstructorclassMethodclassField,10,学习交流PPT,class对象-2,字符串无法充分的表达各种成员,那么就各成员再次进行抽象,publicclassClazzprivateConstructorconstructors;/构造方法privateMethodmethods;/方法privateFieldfields;/成员变量publicClazz(Constructorconstructors,Methodmethods,Fieldfields)this.constructors=constructors;this.methods=methods;this.fields=fields;/省略set、get方法,11,学习交流PPT,class对象,Customer类是客户的抽象,Customer对象“代表”某个客户,但不是某个客户。Clazz类是其他类的抽象,Clazz对象代表其他的类。Java已经为我们提供了这样一个类:java.lang.Class,我们无需自己定义Clazz类,通过Class对象我们可以得到:类继承自哪个类实现了哪些接口有哪些属性有哪些方法有哪些构造方法.,12,学习交流PPT,获取class对象的方式,类名.class,ClassclazStudent=Student.class;ClassclazInt=int.class;ClassclazIntArray=int.class;,13,学习交流PPT,获取class对象的方式,getClass()方法,Studentstudent=newStudent();ClassclazStudent1=student.getClass();ClassclazStudent2=Student.class;,14,学习交流PPT,获取class对象的方式,Class.forName()方法publicstaticClassforName(StringclassName)throwsClassNotFoundException,Studentstudent=newStudent();ClassclazStudent1=student.getClass();ClassclazStudent2=Student.class;tryClassclazStudent3=Class.forName(Student);catch(ClassNotFoundExceptione)e.printStackTrace();,15,学习交流PPT,class对象的作用,getName():获得类的名称,包括包名getSimpleName():获得类的名称,不包括包名getSuperClass():获得本类的父类的class对象getInterfaces():获得本类所实现的所有接口的class对象,16,学习交流PPT,class对象的作用,Classc=ArrayList.class;StringclassName=c.getName();System.out.println(类名:+className);StringsimpleName=c.getSimpleName();System.out.println(简单类名:+simpleName);ClasssuperClass=c.getSuperclass();System.out.println(父类:+superClass.getName();Classinterfaces=c.getInterfaces();System.out.println(接口:);for(inti=0;iinterfaces.length;i+)System.out.println(interfacesi.getName();,17,学习交流PPT,class对象的作用,publicMethodgetDeclaredMethods()throwsSecurityException取得所有当前类声明的方法,包括public,protected,默认,private四种访问权限的方法,但是不包括继承的方法publicMethodgetMethods()throwsSecurityException取得所有public的方法,包括继承的,接口中声明的和自己定义的,18,学习交流PPT,class对象的作用,publicclassStudentpublicStringname;privateintage;staticfinalStringKIND=human;protectedStringschoolName;publicStudent()publicStudent(Stringname,intage)=name;this.age=age;publicStringgetName()returnname;publicvoidsetName(Stringname)=name;publicintgetAge()returnage;publicvoidsetAge(intage)this.age=age;publicvoidpublicStudy(inth)System.out.println(调用publicStudy学习时间是:+h);protectedvoidprotectedStudy(inth)System.out.println(调用protectedStudy学习时间是:+h);voidfriendlyStudy(inth)System.out.println(调用friendlyStudy学习时间是:+h);privatevoidprivateStudy(inth)System.out.println(调用privateStudy学习时间是:+h);,19,学习交流PPT,class对象的作用,获得所有的公开方法,ClassclazStudent=Student.class;MethodpublicMethods=clazStudent.getMethods();System.out.println(=所有public方法=);for(Methodmethod:publicMethods)System.out.println(method.getName();,20,学习交流PPT,class对象的作用,获得所有的本类中定义的方法,Classc=Student.class;MethoddeclaredMethods=c.getDeclaredMethods();System.out.println(=所有当前的类自己定义的方法=);for(Methodm:declaredMethods)System.out.println(m.getName();,21,学习交流PPT,class对象的作用,FieldgetDeclaredFields()取得所有当前类自己定义的属性,包括四种访问权限的FieldgetFields()取得所有public的属性,包括继承的,接口中声明的和自己定义的,22,学习交流PPT,class对象的作用,获得所有的公开属性,Classc=Student.class;FieldpublicMethods=c.getFields();System.out.println(=所有public属性=);for(Fieldfield:publicMethods)System.out.println(field.getName();,publicclassStudentpublicStringname;privateintage;/其他代码,23,学习交流PPT,class对象的作用,获得本类中定义的属性,ClassclazStudent=Student.class;FielddeclaredFields=clazStudent.getDeclaredFields();System.out.println(=获取当前类自己定义的属性=);for(Fieldfield:declaredFields)System.out.println(field.getName();,publicclassStudentpublicStringname;privateintage;staticfinalStringKIND=human;protectedStringschoolName;/省略其他代码,24,学习交流PPT,使用class对象创建类的对象,ObjectnewInstance(),ClassclazStudent=Student.class;Studentstudent;trystudent=clazStudent.newInstance();student.setName(zhangsan);System.out.println(student.getName();catch(InstantiationExceptione)e.printStackTrace();catch(IllegalAccessExceptione)e.printStackTrace();,25,学习交流PPT,反射包,java.lang.reflect.Field类通过Class对象的如下方法可以获得Field对象FieldgetDeclaredField(Stringname)FieldgetField(Stringname)FieldgetDeclaredFields()FieldgetFields(),26,学习交流PPT,Field类的常见方法,getName(),Classc=Student.class;FieldnameField;trynameField=c.getDeclaredField(name);System.out.println(nameField.getName();catch(NoSuchFieldExceptione)e.printStackTrace();catch(SecurityExceptione)e.printStackTrace();,27,学习交流PPT,Field类的常见方法,读取、设置属性publicvoidset(Objectobj,Objectvalue)publicObjectget(Objectobj)Studentstu=newStudent();=tom;/修改属性值,28,学习交流PPT,Field类的常见方法,Studentstudent=newStudent();ClassclazStudent=student.getClass();FieldnameField;trynameField=clazStudent.getField(name);nameField.set(student,张三);/使用field对象读取属性System.out.println(nameField.get(student);/使用student对象方法读取属性System.out.println(student.getName();catch(NoSuchFieldExceptione)e.printStackTrace();catch(SecurityExceptione)e.printStackTrace();catch(IllegalArgumentExceptione)e.printStackTrace();catch(IllegalAccessExceptione)e.printStackTrace();,29,学习交流PPT,Field类的常见方法,访问类自己定义的私有属性publicvoidsetAccessible(booleanflag)Studentstu=newStudent();/stu.age=20;不能直接修改age属性,这句代码将无法编译通过,30,学习交流PPT,Field类的常见方法,Studentstudent=newStudent();ClassclazStudent=student.getClass();FieldageField;tryageField=clazStudent.getDeclaredField(age);/可以操作私有属性,至关重要ageField.setAccessible(true);ageField.set(student,20);/使用field对象读取属性System.out.println(ageField.get(student);/使用student对象的方法读取属性System.out.println(student.getAge();catch(NoSuchFieldExceptione)e.printStackTrace();catch(SecurityExceptione)e.printStackTrace();catch(IllegalArgumentExceptione)e.printStackTrace();catch(IllegalAccessExceptione)e.printStackTrace();,31,学习交流PPT,反射包,java.lang.reflect.Method类通过Class对象的如下方法可以获得Method对象publicMethodgetDeclaredMethods()publicMethodgetMethods()publicMethodgetMethod(Stringname,ClassparameterTypes)publicMethodgetDeclaredMethod(Stringname,ClassparameterTypes)红色位置为变长参数。,32,学习交流PPT,Method类的常见方法,Student类publicvoidprivateStudy(inth)Methodm=c.getDeclaredMethod(“privateStudy”,int.class),33,学习交流PPT,Method类的常见方法,通过反射调用方法Method.invoke(Object,Object);,Studentstudent=newStudent();ClassclazStudent=student.getClass();tryMethodprivateStudyMethod=clazStudent.getDeclaredMethod(privateStudy,int.class);/调用的方法是public的,就不需要进行设置privateStudyMethod.setAccessible(true);privateStudyMethod.invoke(student,24);catch(NoSuchMethodExceptione)e.printStackTrace();catch(SecurityExceptione)e.printStackTrace();catch(IllegalAccessExceptione)e.printStackTrace();catch(IllegalArgumentExceptione)e.printStackTrace();catch(InvocationTargetExceptione)e.printStackTrace();,34,学习交流PPT,反射包,java.lang.reflect.Constructor类通过Class对象的如下方法可以获得Constructor对象ConstructorgetConstructors()取得public的构造函数ConstructorgetDeclaredConstructors()取得所有的构造函数ConstructorgetConstructor(Classparameters)ConstructorgetDeclaredConstructor(Classparameters),35,学习交流PPT,反射包,tryClassclazStudent=Class.forName(chp16.ex08.Student);Constructorconstructor=clazStudent.getConstructor(String.class,int.class);Studentstudent=(Student)constructor.newInstance(张三,24);System.out.println(该学生的年龄是+student.getAge();catch(NoSuchMethodExceptione)e.printStackTrace();catch(SecurityExceptione)e.printStackTrace();catch(IllegalAccessExceptione)e.printStackTrace();catch(IllegalArgumentExceptione)e.printStackTrace();catch(InvocationTargetExceptione)e.printStackTrace();catch(ClassNotFoundExceptione)e.printStackTrace();catch(InstantiationExceptione)e.printStackTrace();,36,学习交流PPT,反射的作用,应用反射的代码,增加程序的通用性Students=newStudent();s.study();StringclassName=Student;Classc=Class.forName(className);Objecto=c.newInstance();StringmethodName=“publicStudy;Methodm=c.getMethod(methodName,int.class);m.invoke(o,12);,37,学习交流PPT,反射案例-1,Animal类,publicabstractclassAnimalprivateStringname;publicAnimal(Stringname)=name;/*动物叫*/publicabstractvoidshout();/*动物吃*/publicabstractvoideat();publicStringgetName()returnname;publicvoidsetName(Stringname)=name;,38,学习交流PPT,反射案例-2,Bird类,publicclassBirdextendsAnimalpublicBird(Stringname)super(name);Overridepublicvoidshout()System.out.println(+this.getName()+小鸟,在唧唧喳喳叫.);Overridepublicvoideat()System.out.println(+this.getName()+小鸟,早吃虫子.);,39,学习交流PPT,反射案例-3,Cat类,publicclassCatextendsAnimalpublicCat(Stringname)super(name);Overridepublicvoidshout()System.out.println(+this.getName()+小猫,在喵喵叫.);Overridepublicvoideat()System.out.println(+this.getName()+小猫,在吃鱼.);,40,学习交流PPT,反射案例-4,Dog类,publicclassDogextendsAnimalpublicDog(Stringname)super(name);Overridepublicvoidshout()System.out.println(+this.getName()+小狗,在汪汪叫.);Overridepublicvoideat()System.out.println(+this.getName()+小狗,在吃骨头.)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030中国浆内施胶剂行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国洗手间通风风扇行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国沙棘果市场供需调查与销售渠道发展趋势报告
- 2025至2030中国氯化铑行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国植脂鲜奶油行业市场深度分析及市场需求与投资报告
- 2025至2030中国棉袜行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国桌面手势识别系统行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国果蔬洗涤盐市场经销模式及发展前景预测分析报告
- 2025-2030中国速食连锁行业经营效益及竞争格局分析报告
- 2025-2030中国超吸水性硅藻土行业供需态势与竞争趋势分析报告
- 健身房预售培训课件
- 智能化热模锻技术
- 个人车位租赁合同电子版 个人车位租赁合同
- 普惠性托育机构申请托育中心情况说明基本简介
- 外轮理货业务基础-理货单证的制作
- 《水火箭制作》课件
- 网络安全预防电信诈骗主题班会PPT
- 优秀物业管理项目评选方案
- 图书管理系统毕业论文参考文献精选,参考文献
- 中国当代旧体诗选读幻灯片
- 吉林省全省市县乡镇卫生院街道社区卫生服务中心基本公共卫生服务医疗机构信息名单目录995家
评论
0/150
提交评论