Day21
----------------------------------------------------------------------------------
今天内容:
(1)反射机制
(2)常用的设计原则
(3)常用的设计模式
1.反射机制(尽量理解、难点)
如:
Person p = new Person(); - 声明Person类型的引用指向Person类型的对象
p.show(); - 调用Person类中的show()方法
1.1 基本概念
通常情况下编写的代码都很固定,在运行阶段产生的结果也是固定的,若在编译阶段不确定会创建什么类型的对象以及调用什么样的方法,这些只能在运行阶段来确定,为了实现该效果,则需要使用反射机制。
换句话说,反射机制就是实现在运行阶段动态创建对象以及动态调用方法的技术。
1.2 Class类
(1)基本概念
java.lang.Class类的实例代表Java应用程序的类和接口等,也就是代表一种数据类型。
该类没有公共构造方法也就是不能new对象,该类的实例由java虚拟机和类加载器自动构造
(2)获取Class类实例/对象的方式
a.使用数据类型.class的方式来获取对应类型的Class对象;
b.使用对象.getClass()的方式来获取对应类型的Class对象;
c.使用包装类.TYPE的方式来获取对应基本数据类型的Class对象;
d.使用Class.forName()的方式来获取参数字符串所指向类型的Class对象;
(3)常用的方法
static Class<?> forName(String className) - 根据参数指定类型来获取对应Class对象
T newInstance() - 用于创建该Class对象所表示类的新实例。
- 若当前Class对象表示Person类,那么调用该方法就是创建Person类型的对象。
- 该方式表示采用无参构造方法来构造对象。
Constructor<T> getConstructor(Class<?>... parameterTypes)
- 用于获取当前Class对象所表示类中的指定公共构造方法,具体版本由参数决定。
- 若当前Class对象表示Person类,则该方法用于获取Person类的构造方法。
Constructor<?>[] getConstructors()
- 用于获取当前Class对象所表示类中的所有公共构造方法。
Field getDeclaredField(String name)
- 用于获取当前Class对象所表示类中指定的成员变量,具体名称由参数决定。
- 若当前Class对象表示Person类,则该方法用于获取Person类中的成员变量。
Field[] getDeclaredFields()
- 用于获取当前Class对象所表示类中的所有成员变量。
Method getMethod(String name, Class<?>... parameterTypes)
- 用于获取当前Class对象所表示类中指定的公共成员方法,具体名称由参数决定。
- 若当前Class对象表示Person类,则该方法用于获取Person类中的成员方法。
Method[] getMethods()
- 用于获取当前Class对象所表示类中所有的公共成员方法。
1.3 Constructor类
(1)基本概念
java.lang.reflect.Constructor类用于描述获取到的单个构造方法。
(2)常用的方法
T newInstance(Object... initargs)
- 使用Constructor引用所表示的构造方法来构造对象,其中参数作为构造方法的实参
1.4 Field类
(1)基本概念
java.lang.reflect.Field类主要用于描述获取到的成员变量信息。
(2)成员方法
Object get(Object obj)
- 用于获取对象obj中此Field类对象所描述的成员变量信息并返回。
- 当此Field对象代表成员变量age时,则调用该方法的效果就是获取对象obj中age数值
void set(Object obj, Object value)
- 用于设置对象obj中此Field类对象所描述的成员变量信息为参数value的数值。
- 当此Field对象代表成员变量age时,则调用该方法效果就是将对象obj中的age数值
修改为value。
void setAccessible(boolean flag)
- 用于设置使用反射机制时是否进行Java语言的访问检查,也就是是否能访问私有成员
1.5 Method类
(1)基本概念
java.lang.reflect.Method类用于描述单个成员方法信息。
(2)常用的方法
Object invoke(Object obj, Object... args)
- 使用对象obj来调用此Method类对象所描述的成员方法,参数为成员方法的实参。
- 当此Method类对象代表成员方法getName()时,则调用该方法的效果就是让对象obj
来调用成员方法getName()。
1.6 JavaBean概念(了解)
JavaBean本质上就是一种编程习惯,不是语法规定或者编程规则,通常要求如下:
a.要求满足JavaBean规范的类应该放在一个包中;
b.要求满足JavaBean规范的类应该提供无参构造方法;
c.要求满足JavaBean规范的类应该私有化成员变量;
d.要求满足JavaBean规范的类应该提供公有的get和set方法;
e.要求满足JavaBean规范的类应该实现序列化接口;
2.常用的设计原则(记住)
2.1 项目开发的流程
编写需求分析文档 => 编写概要设计文档 => 编写详细设计文档 => 编码和测试
=> 安装和调试 => 维护和升级
作业:
1.复习单例设计模式和模板设计模式。