【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编程思想(四) —— 复用类
看了老罗罗升阳的专訪,不由自主地佩服,非常年轻,我之前以为和罗永浩一个级别的年龄.也是见过的不是初高中编程的一位大牛之中的一个,专訪之后.发现老罗也是一步一个脚印的人. 别说什么难做,做不了.你根本就 ...
随机推荐
- js禁止别人查看源码
1.直接按F12 2.Ctrl+Shift+I查看 3.鼠标点击右键查看 4.Ctrl+u=view-source:+url 把以上三种状态都屏蔽掉就可以了,document有onkeydown(键盘 ...
- java三大框架SSH(Struts2 Spring Hibernate)
http://www.cnblogs.com/qiuzhongyang/p/3874149.html
- Xcode不自动提示代码
今天群里有个小朋友惊慌了,“啊啊啊,我的Xcode不能提示代码了,文字都变成黑的了,可怎么办呀...”看到这个我真的是无语了,随手百度一下 ,一大把好不啦,何须惊慌,姐姐我在几年前就遇到了,好在今天不 ...
- @RequestMapping 注解
@RequestMapping 注解开发者需要在控制器内部为每一个请求动作开发相应的处理方法.org.springframework.web.bind.annotation.RequestMappin ...
- boost::interprocess::managed_shared_memory(2)(std::string)
#include <iostream> #include <boost/interprocess/managed_shared_memory.hpp> #include < ...
- 相似性分析之Jaccard相似系数
Jaccard, 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性.Jaccard系数值越大,样本相似度越高 公式: ...
- python框架Scrapy中crawlSpider的使用
一.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo3 二.进入工程目录,根据爬虫模板生成爬虫文件 #scrapy genspi ...
- IOS数据持久化之归档NSKeyedArchiver, NSUserDefaults,writeToFile
//2.文件读写 //支持:NSString, NSArray , NSDictionay, NSData //注:集合(NSArray, NSDictionay)中得元素也必须是这四种类型, 才能够 ...
- python迭代器、生成器、yield和xrange
https://blog.csdn.net/u010138758/article/details/56291013
- Java基础语法 - 面向对象 - 类的主方法main方法
主方法是类的入口点,它指定了程序从何处开始,提供对程序流向的控制.Java编译器通过主方法来执行程序. 主方法的语法如下: /* a.主方法是静态的,如果要直接在主方法中调用其它方法,则该方法必须也是 ...