第七章. 多态
Java的所有函数,除了被声明为final的,其它的都使用动态绑定。通过final关闭动态绑定可能会对性能的提高有所帮助,但不确定。
一些问题
1. 什么是多态
多态最重要的特征是动态绑定,运行时绑定相关的方法(所谓绑定,就是建立函数调用和函数本体之间的关联)。多态在Java中有两种表现形式:重载(overloading)和复写(overriding),其中重载是相同方法不同参数,复写是同一方法相同参数的另外的实现,大多是通过接口和抽象方法的形式来实现。
多态是实现接口和实现的分离的一种手段
2. 对象的构造函数的调用顺序
l 调用父类的构造函数,从继承的根源开始调用,直至最末一层的父类。
l 根据类中成员的声明顺序,调用成员的初始值设定(构造函数)。
l 调用derived class 构造函数本体。
第八章. 接口和内部类
接口内部的所有定义都是public,即使没有定义。
Java中通过了接口和内部类实现了c++中的多重继承的机制。
Interface存在的原因有二:首先是能够被向上转型至多个基本类型;第二是让客户端程序员无法产生其对象,可以确保它只是一个接口而无实现。
内部类
第九章. 持有你的对象(new version)
一些问题
1. Java中提供了一些持有对象的方式,简单描述。
a. 数组。一旦生成,容量不能改变
b. Collection包含单一元素,Map保存相关联的键值对。容器不能持有基本类型,但Java自动包装机制能实现包装类和基本类型的转换。HashMap设计用来快速访问;TreeMap保持键始终处于排序状态;LinkedHashMap保持元素插入的顺序。
c. List。容量可以改变。如果要进行大量随即访问,使用ArrayList;如果要经常插入删除,使用LinkedList
d. Queue和栈的行为由LinkedList提供
e. Set不接受重复的元素。HashSet提供最快查询速度,TreeSet保持元素始终处于排序状态,LinkedSet保持元素插入的顺序。
2. 容器的简单分类图
第十章. 异常处理
在早期的程序语言中,可能存在这样的情况:它们建立于约定俗成的基础上,通过返回某个特殊值或设立某个flag,并假设接受者会检查该返回值或flag,以判断错误是否发生。这种错误处理方式在大型、稳固、可维护的程序发展上没有优势。
尽量不要在finally区域中添加业务逻辑代码
一些问题:
1. 何时使用finally关键字?
当需要将某些事物设回其原始状态时,finally成了必要。如对已经打开的文件、网络连接、画面上的某些东西、甚至外在世界的某个开关的清理。
2. 异常处理的作用?
a. 修正问题,并且在此调用引发异常的函数
b. 暂时解决该问题,不再尝试执行该函数,继续程序的执行
c. 计算出某个可替代的结果,用来代换函数原本应得的值
d. 进行一些在目前状态下可以运行的一些工作,然后抛出同一异常给高层
e. 进行一些在目前状态下可以运行的一些工作,然后抛出不同的异常给高层
f. 终止程序
g. 进行简化
h. 让程序库和程序更加安全
第十一章. Java I/O系统
一些问题
1. Java I/O中最经典的设计模式是什么?请介绍一下?
毫无疑问,Decorator装饰者模式是Java I/O中经典的设计模式。
其经典结构如下图示:
装饰者模式可以讲功能动态的加载到对象上,如果要扩展对象的功能,装饰者模式提供了一种比继承更具弹性的替代方案。
组成:组件的接口类,具体的组件类,实现组件接口的装饰者接口,具体的装饰者类。
问题:
l 装饰者模式会产生庞大的装饰类,而且这些类通常都比较小,如果结构组织不好,很容易造成混乱。
l 如果要对组件对象做一些特殊的操作,使用装饰者模式会存在问题,因为在被装饰后的具体组建对象的类型发生了变化。被装饰的组件对象会被当做装饰者来对待。
l 在实例化组建的时候,装饰者模式增加了代码的复杂度??
上图是Java IO包的继承结构,其中FilterInputStream和FilterOutputStream是装饰者接口,其它继承自InputStream和OutputStream的类是具体的Stream类。
比如,
FileInputStream fis = new FileInputStream(“test.zip”);
BufferedInputStream bis = new BufferedInputStream(fis);
ZipInputStream zis = new ZipInputStream(bis);
则实现了通过缓冲区的模式来读取压缩文件。
2. 介绍一下Java Collections Framework?
第十二章. RTTI运行时类型识别
Java程序启动时不会将整个程序都装载,当运行时需要某一个class的对象时,JVM会先检查Class对象是否被装载,如果没有则根据名称找到.class并装载对应Class对象。
Class对象只在被用到时才装载,只有在装载class时才会进行static初始化操作。
一些问题:
1. RTTI有哪些形式?(传统RTTI)
向上转型、向下转型、instance of
2. RTTI相对反射机制有何不足?
反射实现在编译期间不知道Class的情况下实现类的调用等操作,而传统的RTTI必须在编译前知道类的情况,至少是知道类名。
3. 何时使用反射?
首先是基于组件的编程架构中?其次是为了跨越网络产生或执行远端平台对象。
参考文献:侯捷谈反射机制http://blog.csdn.net/sunsnowad/archive/2009/07/17/4355695.aspx
第十三章. 制作窗口和applet
第十四章. 多线程
tobecontinued
1. 简单介绍一下Java多线程。
在java中实现线程有两种方式:继承Thread类和实现Runnable接口。
为防止多个线程访问共同的资源,需要在方法或对象前添加synchronized关键字,添加次关键字的方法会锁住方法所在的对象。即锁是加在了对象的级别。
第十五章. 分布式计算
目录:
网络编程
JDBC
Servlets
JSP
RMI
CORBA
EJB
Jini:分布式服务