Thinking in Java 读书笔记 3

第七章. 多态

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的继承结构,其中FilterInputStreamFilterOutputStream是装饰者接口,其它继承自InputStreamOutputStream的类是具体的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:分布式服务

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值