mark一篇09年的《Thinking in Java》笔记:here --> https://lawrence-zxc.github.io/2009/11/07/thinking-in-java/

1、复用类的方式有四种:创建这个类的对象、组合、继承、代理(*略)

2、有时候无法创建一个类的对象(当这个类的构造器被设置为private的时候)

3、运用组合这个复用策略,首先要考虑的是成员对象的访问权限及成员对象的初始化和清理。设置访问权限就是去考虑和客户程序员的关系,哪些接口是需要暴露出来的?;成员对象的初始化方式有4种(实际应该超过4种):在定义对象的时候初始化(在Core Java里称作实例域初始化)、在构造器中初始化、惰性初始化、初始化块初始化。(不完全对象初始化语块执行顺序)值得一提的是惰性初始化:意思就是在要使用这个对象的时候才初始化。

4、继承,首先要考虑的是如何对基类的成员进行初始化,唯一方式就是通过super调用基类的构造器。(而且必须作为在导出类构造器中要做的第一件事)。其次是要考虑基类成员的清理,多数时候让垃圾回收机完成就可以了,但是在一些特殊的情况需要手动处理(有时候,清理不一定是指把对象清出内存,也可以是把对象恢复到初始状态),如何写清理方法?--“执行类的所有特定清理动作,其顺序同生成顺序相反;然后同示范的那样调用基类的清理方法”。

5、代理,暂略。

6、进一步理解继承和组合:继承是取得基类的接口,组合是使用子对象的功能。

7、protected:例如,等于HttpServlet来说,唯一需要暴露出来的接口只是service方法,其他doGet、doPost方法都相当于“辅助方法”,但是设置为private话会导致子类无法继承,因此就需要介于两者之间的protected.允许子类和朋友继承(/访问)。

8、主要从效率和设计上考虑考虑使用final。

private int val = 1; //
private final int val = 1; //
private static final int VAL = 1; //

上面的代码中2和3都是编译时常量,效率上:把固定不变的基本数据类型声明成final减轻了运行时的负担。设计上:2和3在效果上是没有区别的(都是编译时常量),添加static完全是为了强调“只有一份”。

注意点:但是并不是所有声明成final的都是编译时常量,例如下面代码只有在运行时才能得到值:

private static final int INT 5 = rand.nextInt(20)

使用static final通常是为了强调这是一个只有一份的常量,命名规则是“全部大写”。

9、包括继承在内的初始化全过程。了解这个的价值在于:1继承其实是无处不在的,所有类都继承自object类;2对于所发生的一切有一个全局性的把握。这个过程,概括而言就是:从根基类的static到最后导出的那个类的构造器。作为一个语言的使用者,暂时就理解到这里。。。。(想到一个摸清楚所有细节的途径,自己实现一套jvm javac。。)

10、向上转型。

【Thinking in java, 4e】复用类的更多相关文章

  1. Java基础 -- 复用类(组合和继承)

    复用类有两种实现方式. 在新的类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以这种方法称之为组合. 采用继承实现. 一  组合语法 下面创建两个类WaterSource和Sprinkler ...

  2. Java基础—复用类

    复用代码是Java众多引人注目的功能之一. 一般而言,实现代码重用java提供了两种方式:组合以及继承. 组合:新的类由现有类的对象所组成.(复用现有代码的功能,而非它的形式) 继承:按照现有类的类型 ...

  3. [THINKING IN JAVA]复用类

    7 复用类 7.1 组合 即在一个类中使用另一个类作为成员变量,这是复用了现有程序代码的功能,而非形式. 7.2 继承 关键字:extends,这种复用是形式的复用,是一种可扩展和限制的复用: 复用: ...

  4. java编程思想-复用类总结

    今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...

  5. Java编程思想学习(五) 复用类

    1.继承与组合 复用类的方法有两种:继承与组合.继承就不多说了,组合就是直接在类中new一个对象. 数组也是对象,使用数组也是组合的一种. 2.初始化基类 当创建一个导出类的对象时,该对象包含一个基类 ...

  6. java复用类

    java复用类英文名叫reusing classes  ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承: 1.组合: has-a 的关系  (自我理解:组合就是我们 ...

  7. 初读"Thinking in Java"读书笔记之第七章 --- 复用类

    组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 J ...

  8. 《Think in Java》(七)复用类

    Java 中复用代码的方式就是复用类,复用类的方式有: 组合 继承 代理(并没有啥高深的含义,只是在使用类A前,新增了类B,让类B的每个方法去调用类A中对应的方法,也就是说类B代理了类A...不过我还 ...

  9. Java编程思想(四) —— 复用类

    看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...

随机推荐

  1. TortoiseGit上传项目代码到github方法(超简单)

    Github是咱广大开发者用的非常多的项目代码版本管理网站,项目托管可以是私人的(private)或者公开的(public),私人的收费,一个月7美金.咱这里就只说我们个人使用的,一般都是代码对外开放 ...

  2. 深入学习QWidget-1

    1.QWidget对事件的抓取和放手.主要有例如以下几个接口 grabGesture 抓取输入手势 ungrabGesture 取消抓取手势 grabKeyboard 抓取键盘输入 grabMouse ...

  3. BZOJ 3261 最大异或和 可持久化Trie树

    题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...

  4. Asynchronous calls and remote callbacks using Lingo Spring Remoting

    http://www.jroller.com/sjivan/entry/asynchronous_calls_and_callbacks_using Asynchronous calls and re ...

  5. 怎样从Mysql官网下载mysql.tar.gz版本的安装包

     今天学习在Linux上部署项目,用到了Mysql,因此想要下载适用于Linux的安装版本,在Mysql官网找了半天,终于找到怎样下载了,这里写出来,以后大家找的时候就好找了. 第一步:在百度输入My ...

  6. iOS 遍历控件

    NSArray *subviews = [_bgImageView subviews]; for (id objInput in subviews) { if ([objInput isKindOfC ...

  7. Linux shell 脚本中, $@ 和$# 分别是什么意思?

    转自:https://zhidao.baidu.com/question/412833470.html $@:表示所有脚本参数的内容 $#:表示返回所有脚本参数的个数. 示例:编写如下shell脚本, ...

  8. python之MySQL学习——简单的增删改查封装

    1.增删改查封装类MysqlHelper.py import pymysql as ps class MysqlHelper: def __init__(self, host, user, passw ...

  9. python array

    python中通常情况下for循环会枚举各个元素不会访问下标,例如: l = [1,2,4,6] for val in l: print l 但是有时候我们会需要在便利数组的同时访问下标,这时候可以借 ...

  10. 【Linux command reference】

    ubuntu16.04安装中文输入法: https://blog.csdn.net/singleyellow/article/details/77448246 ubuntu16.04 用vi编辑代码, ...