【Thinking in java, 4e】复用类
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】复用类的更多相关文章
- Java基础 -- 复用类(组合和继承)
复用类有两种实现方式. 在新的类中产生现有类的对象,由于新的类是由现有类的对象所组成,所以这种方法称之为组合. 采用继承实现. 一 组合语法 下面创建两个类WaterSource和Sprinkler ...
- Java基础—复用类
复用代码是Java众多引人注目的功能之一. 一般而言,实现代码重用java提供了两种方式:组合以及继承. 组合:新的类由现有类的对象所组成.(复用现有代码的功能,而非它的形式) 继承:按照现有类的类型 ...
- [THINKING IN JAVA]复用类
7 复用类 7.1 组合 即在一个类中使用另一个类作为成员变量,这是复用了现有程序代码的功能,而非形式. 7.2 继承 关键字:extends,这种复用是形式的复用,是一种可扩展和限制的复用: 复用: ...
- java编程思想-复用类总结
今天继续读<java 编程思想>,读到了复用类一章,看到总结写的很好,现贴上来,给大家分享. 继承和组合都能从现有类型生成新类型.组合一般是将现有类型作为新类型底层实现的一部分来加以复用, ...
- Java编程思想学习(五) 复用类
1.继承与组合 复用类的方法有两种:继承与组合.继承就不多说了,组合就是直接在类中new一个对象. 数组也是对象,使用数组也是组合的一种. 2.初始化基类 当创建一个导出类的对象时,该对象包含一个基类 ...
- java复用类
java复用类英文名叫reusing classes ,重新使用的类,复用的意思就是重复使用的类,其实现方法就是我们平常使用的组合和继承: 1.组合: has-a 的关系 (自我理解:组合就是我们 ...
- 初读"Thinking in Java"读书笔记之第七章 --- 复用类
组合语法 将对象引用置于新类中,即形成类的组合. 引用初始化方法 在定义处初始化. 在类的构造器中初始化. 在使用这些对象之前,进行"惰性初始化". 使用实例初始化. 继承语法 J ...
- 《Think in Java》(七)复用类
Java 中复用代码的方式就是复用类,复用类的方式有: 组合 继承 代理(并没有啥高深的含义,只是在使用类A前,新增了类B,让类B的每个方法去调用类A中对应的方法,也就是说类B代理了类A...不过我还 ...
- Java编程思想(四) —— 复用类
看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...
随机推荐
- 【PyQt】算法-插入、递归、冒泡
# coding=utf-8 import sys from PyQt4.QtGui import * from PyQt4.QtCore import * class MainWindow(QMai ...
- Page_ClientValidate 用法
JS script function ConfirmMe(){ return confirm("Do you want to proceed?");} ASPX <asp ...
- (转)Unity笔记之编辑器(Foldout、HelpBox、InspectorTitlebar、Slider、MinMaxSlid ...
1. Foldout.HelpBox 折叠菜单,大家都知道,不具体解释了,直接代码.因为折叠菜单中必然是有内容才能看到效果,所以顺带把HelpBox(提示框)也说了. [code]csharpcode ...
- html空格字符
一.使用全角空格IDEOGRAPHIC SPACE---- Encodings HTML Entity (decimal) HTML Entity (hex) How to type in ...
- python3----模块(序列化(json&pickle)+XML+requests)
一.序列化模块 Python中用于序列化的两个模块: json 跨平台跨语言的数据传输格式,用于[字符串]和 [python基本数据类型] 间进行转换 pickle python内置的数据 ...
- iOS开发之--Mac终端命令大全
目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 ...
- IOS开发报错之Undefined symbols for architecture armv6
本文转载至 http://blog.csdn.net/sanpintian/article/details/7575434 今天在项目中引入SVSegmentedControl.h/.my以及SVS ...
- POJO应用框架:Spring与EJB3.0的比较
英文原文地址:http://www.onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html中文地址:http://www.matrix.org.cn/r ...
- [Go语言]从Docker源码学习Go——function和method
function和method关系 method是针对某一类型定义的function, function可以单独调用,method必须针对某一类型的实例进行调用 //function 调用方式 pac ...
- filezilla 读取目录失败
用到FTP,本来一直用主动模式,可以最近老是读取目录失败,425 Can't open data connection 和 读取目录列表失败(搞了好久,一天) 问题解决 这个问题主要是由于使用Pass ...