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. android手机有多个摄像头,打开其中一个

    方法: private Camera openFrontFacingCameraGingerbread() { int cameraCount = 0; Camera cam = null; Came ...

  2. Android中的ACCESS_MOCK_LOCATION权限使用Demo

    转载地址:http://mobiarch.wordpress.com/2012/07/17/testing-with-mock-location-data-in-android/ The DDMS t ...

  3. poj 3414(简单bfs)

    题目链接:http://poj.org/problem?id=3414 思路:bfs简单应用,增对瓶A或者瓶B进行分析就可以了,一共6种状态. #include<iostream> #in ...

  4. Mysql数据库存储是乱码问题(或者在查询时无法加载数据)

    在连接数据库时添加一行代码即可解决:?useUnicode=true&characterEncoding=utf8 截图如下:

  5. Django实现组合搜索的方法示例

    目录 一.实现方法 二.基本原理 三.代码样例 方法1:纯模板语言实现 方法二:使用simpletag实现 四.其他变化 1.model定义 2.处理函数变化 3.simpletag相应改变   一. ...

  6. Codeforces Round #207 (Div. 1) B (gcd的巧妙运用)

    比赛的时候不知道怎么写... 太弱了. 看了别人的代码,觉得这个是个经典的知识点吧. gcd的巧妙运用 自己想的时候苦苦思考怎么用dp求解. 无奈字符串太长而想不出好的算法. 其实在把a和b字符串都分 ...

  7. HDU3308(LCIS) 线段树好题

    题目链接:传送门 题目大意:给你n个数,m个操作.操作有两种:1.U x y 将数组第x位变为y   2. Q x y 问数组第x位到第y位连续最长子序列的长度.对于每次询问,输出一个答案 题目思路: ...

  8. iOS设置导航栏透明度

    As I support Colin's answer, I want to give you an additional hint to customize the appearance of an ...

  9. FW qunit introduction

    自动化测试软件对于开发来说是一个很重要的工具,而单元测试对于自动化测试来说是基本组成部分:软件的每一个组件或者单元可以在非人工介入的情况下,使用测试工具一遍遍的重复执行.换句话说,就是你可以写一次测试 ...

  10. FastReports_4.14.1 _Cliff手动安装

    首次编译frx15.dproj包的时候,会出错: [DCC Fatal Error] fs15.dpk(59): F1026 File not found: 'fs_ipascal.dcu'原因是因为 ...