Java核心逻辑第11章反射.ppt
《Java核心逻辑第11章反射.ppt》由会员分享,可在线阅读,更多相关《Java核心逻辑第11章反射.ppt(48页珍藏版)》请在三一办公上搜索。
1、第11章 反射,回顾,网络应用的结构 IP地址与端口号 TCP编程 UDP编程,本章目标,class对象 获取class对象的方式 反射包(java.lang.reflect)反射的作用,本章结构,反射,获取class对象,反射包java.lang.reflect,反射的作用,Class.forName()方法,类名.class,Method类,Field类,class对象概念,getClass()方法,Constructor类,思考,给定一个对象,要求输出这个对象所有的public方法的名称public static void printMethod(Object object)给定一个字符
2、串参数,这个参数表示一个类的名字。根据 类名,创建该类的一个对象并返回public static Object createObject(String className),class对象,Customer类是客户的抽象,Customer对象“代表”某个客户,但不是某个客户。抽象一个Customer的过程:,public class Customer private String name;private int age;private String address;/使用字符串表示的地址无法正确的表示地址public Customer(String name,int age,String a
3、ddress)this.name=name;this.age=age;this.address=address;/省略set、get方法,class对象,将address单独封装成一个类Address,public class Address private String province;private String city;private String street;private int code;public Address(String province,String city,String street,int code)this.province=province;this.c
4、ity=city;this.street=street;this.code=code;/省略set、get方法,class对象,将Customer的address属性的类型换成Address类型,public class Customer private String name;private int age;private Address address;/将String类型转换成Address类型public Customer(String name,int age,Address address)this.name=name;this.age=age;this.address=addre
5、ss;/省略set、get方法,class对象,如果想抽象一个Class的信息,那么我们如下来抽象:类中有许多构造函数,有许多方法,有许多成员变量,public class Clazz/构造方法private String construtctors;/字符串无法充分表示的表示构造方法的信息/方法private String methods;/字符串无法充分的表示方法/成员变量private String fields;/字符串无法充分的表示成员变量的信息public Clazz(String construtctors,String methods,String fields)super()
6、;this.construtctors=construtctors;this.methods=methods;this.fields=fields;/省略set、get方法,class对象-1,字符串无法充分的表达各种成员,那么就各成员再次进行抽象,/将Clazz中的各成员对象进行抽象class Constructor class Method class Field,class对象-2,字符串无法充分的表达各种成员,那么就各成员再次进行抽象,public class Clazz private Constructor constructors;/构造方法private Method meth
7、ods;/方法private Field fields;/成员变量public Clazz(Constructor constructors,Method methods,Field fields)this.constructors=constructors;this.methods=methods;this.fields=fields;/省略set、get方法,class对象,Customer类是客户的抽象,Customer对象“代表”某个客户,但不是某个客户。Clazz类是其他类的抽象,Clazz对象代表其他的类。Java已经为我们提供了这样一个类:,我们无需自己定义Clazz类,通过Cl
8、ass对象我们可以得到:类继承自哪个类实现了哪些接口有哪些属性有哪些方法有哪些构造方法.,获取class对象的方式,类名.class,Class clazStudent=Student.class;Class clazInt=int.class;Class clazIntArray=int.class;,获取class对象的方式,getClass()方法,Student student=new Student();Class clazStudent1=student.getClass();Class clazStudent2=Student.class;,获取class对象的方式,Class.
9、forName()方法public static Class forName(String className)throws ClassNotFoundException,Student student=new Student();Class clazStudent1=student.getClass();Class clazStudent2=Student.class;try Class clazStudent3=Class.forName(Student);catch(ClassNotFoundException e)e.printStackTrace();,class对象的作用,getN
10、ame():获得类的名称,包括包名getSimpleName():获得类的名称,不包括包名getSuperClass():获得本类的父类的class对象getInterfaces():获得本类所实现的所有接口的class对象,class对象的作用,Class c=ArrayList.class;String className=c.getName();System.out.println(类名:+className);String simpleName=c.getSimpleName();System.out.println(简单类名:+simpleName);Class superClass
11、=c.getSuperclass();System.out.println(父类:+superClass.getName();Class interfaces=c.getInterfaces();System.out.println(接口:);for(int i=0;i interfaces.length;i+)System.out.println(interfacesi.getName();,class对象的作用,public Method getDeclaredMethods()throws SecurityException取得所有当前类声明的方法,包括public,protected,
12、默认,private四种访问权限的方法,但是不包括继承的方法public Method getMethods()throws SecurityException取得所有public的方法,包括继承的,接口中声明的和自己定义的,class对象的作用,public class Student public String name;private int age;static final String KIND=human;protected String schoolName;public Student()public Student(String name,int age)this.name=
13、name;this.age=age;public String getName()return name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;public void publicStudy(int h)System.out.println(调用publicStudy学习时间是:+h);protected void protectedStudy(int h)System.out.println(调用p
14、rotectedStudy学习时间是:+h);void friendlyStudy(int h)System.out.println(调用friendlyStudy学习时间是:+h);private void privateStudy(int h)System.out.println(调用privateStudy学习时间是:+h);,class对象的作用,获得所有的公开方法,Class clazStudent=Student.class;Method publicMethods=clazStudent.getMethods();System.out.println(=所有public方法=);
15、for(Method method:publicMethods)System.out.println(method.getName();,class对象的作用,获得所有的本类中定义的方法,Class c=Student.class;Method declaredMethods=c.getDeclaredMethods();System.out.println(=所有当前的类自己定义的方法=);for(Method m:declaredMethods)System.out.println(m.getName();,class对象的作用,Field getDeclaredFields()取得所有当
16、前类自己定义的属性,包括四种访问权限的 Field getFields()取得所有public的属性,包括继承的,接口中声明的和自己定义的,class对象的作用,获得所有的公开属性,Class c=Student.class;Field publicMethods=c.getFields();System.out.println(=所有public属性=);for(Field field:publicMethods)System.out.println(field.getName();,public class Student public String name;private int ag
17、e;/其他代码,class对象的作用,获得本类中定义的属性,Class clazStudent=Student.class;Field declaredFields=clazStudent.getDeclaredFields();System.out.println(=获取当前类自己定义的属性=);for(Field field:declaredFields)System.out.println(field.getName();,public class Student public String name;private int age;static final String KIND=hu
18、man;protected String schoolName;/省略其他代码,使用class对象创建类的对象,Object newInstance(),Class clazStudent=Student.class;Student student;try student=clazStudent.newInstance();student.setName(zhangsan);System.out.println(student.getName();catch(InstantiationException e)e.printStackTrace();catch(IllegalAccessExce
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 核心 逻辑 11 反射

链接地址:https://www.31ppt.com/p-5436114.html