java编程思想06

类再生

java中为了代码的复用和再生,可以使用类继承和类合成的形式。

  1. 类继承是指创建一个新类作为现有类的的一个“类型”;我们可以原样的采取现有类的代码,同时可以加上新代码而对现有类又不会产生影响。
  2. 类合成是指在新类中创建原有类的对象,利用原有类的对象来操作原有类的代码,这只是一种简单重复利用代码的功能。
类合成

通过类合成来达到类复用的过程中,需要注意几点

  1. 类中的合成类的对象,编译器并不会主动的去调用默认构造函数,它会被默认初始值为null。
  2. 合成类的对象的初始化我们可以在其对象定义的时候进行初始化化,或者在类的构建器里进行初始化,或者在类对象使用之前进行初始化的工作;总之在使用合成类对象之前,其对象必须得到正确的初始化值,否者使用它会产生一个NullPointException违例。
类继承

java是单继承的,创建一个类时默认会从标准根类Object中继承,在类继承的过程中需要注意几点

  1. 通过关键字extends来继承基础类,新类可以自动获得基础类的所有数据成员以及方法。
  2. 在衍生类的方法中可以通过关键字super来调用基础类的方法
  3. 衍生类可以加入自己的方法和数据成员以便对基础类进行扩展
  4. 创建衍生类的过程中,其实会在衍生类中创建基础类的子对象;为了使得基础类的子对象在衍生类中得到正确的初始化,需要在衍生类中调用基础类的构建器;
  5. 对于无参构建器,JAVA会自动的插入基础类构建器的调用;
  6. 含有自变量的构建器,则需要我们明确指定调用基础类的构建器且在衍生类的构建器中是需要首先调用的。
垃圾收集
  1. Java不存在C++的“破坏器”的概念,所有的垃圾都有垃圾收集器进行统一处理和回收。
  2. 垃圾收集器何时进行回收,我们并不知道,所以当一个类中希望清除什么东西,必须写一个特别的方法,明确来做这些事。
  3. 在自己的清除方法中,必须注意对基础类以及成员对象清除方法的调用顺序;首先完成对类有关的所有特殊工作,然后调用基础类的清除方法。
  4. 因为垃圾收集器的收集工作的时间是不可预期的,所以不要依赖finalize()方法。
合成还是继承
  1. 如果想使用新类内部一个现有类的特性,而不想使用它的接口,通常选择合成。
  2. 继承是取得一个现成的类,并制作它的一个特殊版本。
  3. “属于”关系是用继承来表达的,“包含”关系是用合成来表达的,在选择继承还是合成时,可以参考它们之间的关系。
protected

理想的情况下,一个类的数据成员都应该被设计成private,以达到数据的隐藏;但在某些情况下,基础类为了使得其衍生类和包中的类可用时,可以将其数据成员设计成protected以达到这种效果。

上溯造型
  1. 继承是对新类和基础类之间关系的一种表达,可以总结为:“新类属于现有类的一种类型”。
  2. 将衍生类转换成基础类类型的过程叫做“上溯造型”,这是一种从特殊到常规的类型,可以将衍生类看作是基础类的一个超集。
  3. 判断是否使用合成还是继承,我们还可以通过是否需要从衍生类上溯造型到基础类,如果需要则使用继承,否者使用合成。
final

final声明代表这个东西不能改变。可以应用在数据、方法和类中。

final数据

final修饰数据主要分为成员字段和方法自变量,修饰成员字段时有几点值得注意:

  1. 编译期基本数据常数,它的值永远不会改变;但需要注意的是final的修饰的常数并不一定会在编译期就能确定。如下面例子中的data会在运行期进行确定
    
     final int data = (int)(Math.random() * 20);
     
  2. 句柄对象常数,是指不能将句柄对象指向另一个对象;但是句柄对象本身的数据是可以修改的。
  3. final的数据可以在定义时为空白,我们只需在使用final数据前对它进行正确的初始化即可。
  4. finalstatic final 的区别主要是final修饰的字段是指其所属的类对象的,每个对象可以有所不同;而static final是所属类本身的,所有的对象都是相同。

final方法自变量通用分为其修饰的变量是否是基本变量还是句柄对象;当修饰基本变量指在方法内容的使用过程中不能改变其值,而修饰句柄对象指在方法内部不能将其句柄执行其他对象,但是可以修改其句柄对象的值。

final方法

final修饰方法主要有两方面的用途和一个注意点

  1. 给方法上锁,防止任何继承类改变它的本来含义,也就是说不可给覆盖或改写。
  2. 提高程序效率,使用final修饰方法时,编译器在执行这个方法时会采用嵌入的方法来调用(会使用方法主体内实际代码的一个副本替换方法调用)。
  3. private方法本身会自动成为final,因为我们无需为其修饰。
final类

修饰final类表示这个类不能被继承,因为其禁止了继承,所以其所有的方法被默认为final

第1章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重新使用接口 1.5.1 改善基础类: 尽管extends关键字暗示着我们要为接口“扩展”新功能,但实情并非肯定如此。为区分我们的新类,第二个办法是改变基础类一个现有函数的行为。我们将其称作“改善”那个函数。 为改善一个函数,只需为衍生类的函数建立一个新定义即可。我们的目标是:“尽管使用的函数接口未变,但它的新本具有不同的表现”。 1.5.2 等价和类似关系 1.6 多形对象的互换使用 1.6.1 动态绑定 1.6.2 抽象的基础类和接口 1.7 对象的创建和存在时间 1.7.1 集合与继承器 1.7.2 单根结构 1.7.3 集合库与方便使用集合 1.7.4 清除时的困境:由谁负责清除? 1.8 违例控制:解决错误 1.9 多线程 1.10 永久性 1.11 Java和因特网: 既然Java不过另一种类型的程序设计语言,大家可能会奇怪它为什么值得如此重视,为什么还有这么多的人认为它是计算机程序设计的一个里程碑呢?如果您来自一个传统的程序设计背景,那么答案在刚开始的时候并不是很明显。Java除了可解决传统的程序设计问题以外,还能解决World Wide Web(万维网)上的编程问题。 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 不要迷失: 在整个开发过程中,最重要的事情就是:不要将自己迷失!但事实上这种事情很容易发生。大多数方法都设计用来解决最大范围内的问题。当然,也存在一些特别困难的项目,需要作者付出更为艰辛的努力,或者付出更大的代价。但是,大多数项目都是比较“常规”的,所以一般都能作出成功的分析与设计,而且只需用到推荐的一小部分方法。但无论多么有限,某些形式的处理总是有益的,这可使整个项目的开发更加容易,总比直接了当开始编码好! 也就是说,假如你正在考察一种特殊的方法,其中包含了大量细节,并推荐了许多步骤和文档,那么仍然很难正确判断自己该在何时停止。时刻提醒自己注意以下几个问题: (1) 对象是什么?(怎样将自己的项目分割成一系列单独的组件?) (2) 它们的接口是什么?(需要将什么消息发给每一个对象?) 在确定了对象和它们的接口后,便可着手编写一个程序。出于对多方面原因的考虑,可能还需要比这更多的说明及文档,但要求掌握的资料绝对不能比这还少。 整个过程可划分为四个阶段,阶段0刚刚开始采用某些形式的结构。 1.12.2 阶段0:拟出一个计划: 1.12.3 阶段1:要制作什么?: 1.12.4 阶段2:如何构建? 1.12.5 阶段3:正式创建 1.12.6 阶段4:校订 1.12.7 计划的回报 1.13 Java还是C++? 第2章 一切都是对象 “尽管以C++为基础,但Java是一种更纯粹的面向对象程序设计语言”。 无论C++还是Java都属于杂合语言。但在Java中,设计者觉得这种杂合并不象在C++里那么重要。杂合语言允许采用多种编程风格;之所以说C++是一种杂合语言,是因为它支持与C语言的向后兼容能力。由于C++是C的一个超集,所以包含的许多特性都是后者不具备的,这些特性使C++在某些地方显得过于复杂。 Java语言首先便假定了我们只希望进行面向对象的程序设计。也就是说,正式用它设计之前,必须先将自己的思想转入一个面向对象的世界(除非早已习惯了这个世界的思维方式)。只有做好这个准备工作,与其他OOP语言相比,才能体会到Java的易学易用。在本章,我们将探讨Java程序的基本组件,并体会为什么说Java乃至Java程序内的一切都是对象。 2.1 用句柄操纵对象 2.2 必须创建所有对象: 创建句柄时,我们希望它同一个新对象连接。通常用new关键字达到这一目的。new的意思是:“把我变成这些对象的一种新类型”。所以在上面的例子中,可以说: String s = new String("asdf"); 它不仅指出“将我变成一个新字串”,也通过提供一个初始字串,指出了“如何生成这个新字串”。 当然,字串(String)并非唯一的类型。Java配套提供了数量众多的现成类型。对我们来讲,最重要的就是记住能自行创建类型。事实上,这应是Java程序设计的一项基本操作,是继续本书后余部分学习的基础。 2.2.1 保存在什么地方 2.2.2 特殊情况:主类型 2.2.3 Java中的数组 2.3 绝对不要清除对象:在大多数程序设计语言中,变量的“存在时间”(Lifetime)一直是程序员需要着重考虑的问题。变量应持续多长的时间?如果想清除它,那么何时进行?在变量存在时间上纠缠不清会造成大量的程序错误。在下面的小节里,将阐示Java如何帮助我们完成所有清除工作,从而极大了简化了这个问题。 2.3.1 作用域 2.3.2 对象的作用域 2.4 新建数据类型:类 2.4.1 字段和方法 2.5 方法、自变量和返回值 2.5.1 自变量列表 2.6 构建Java程序:正式构建自己的第一个Java程序前,还有几个问题需要注意。 2.6.1 名字的可见性 2.6.2 使用其他组件 2.6.3 static关键字 2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记:变量文档只能包括嵌入的HTML以及@see引用。 2.8.7 方法文档标记 2.8.8 文档示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值