Thinking in Java读书笔记(4-8章)

来源:转载


第四章.控制执行流程

1、Java中控制流程和C、C++完全相同,if-else是最基本的流程控制语句,其中在一个if-else块中if是必须的,但是else不一定出现,else if并不是一个单独的关键字。
2、while、do-while、for的异同
whine在循环开始前会计算一次布尔表达式的值,如果为"true"则执行循环体反之则不执行,循环体可能一次都不执行。
do-while是在循环体执行之后再判断其布尔表达式的值,这种情况下无论如何都要执行一次循环体。
for和while非常类似,只不过在其块中需要执行初始化、布尔表达式、步进代码。其括号里也可以三个部分都不写,只有分号。

3、Foreach语句,这是for语句的一种变体,这种方式相对于for语句更加简洁,而且对于遍历的的数据类型更加明了,使得程序的可读性得到提高。

4、return、break、continue
return关键字有两个用途:方法返回值和当前方法的退出。
break关键字用于迭代语句中的强行退出循环,并不执行剩余的部分循环语句。
continue用于停止当前迭代,退出并执行下一次循环。
这三个语句都是不需要任何条件判断语句而直接执行。

5、goto关键字
goto关键字在很多程序设计语言中会用到或者作为关键字,但是这个关键字很多时候会使得程序丢失自身的逻辑性。所以在java中goto仅作为保留关键字而并没有使用。


6、switch
switch是使得程序选择性的执行某一段代码,其中每个case 后面代码可以跟break也可以省略,省略break的情况下会执行其他case语句。


第五章.初始化与清理
1、Java中采用构造器确保对象的初始化,java中每个类都有其默认构造方法这个构造方法是不带参的,当然程序编写人员也可以自己定义带参数的构造方法。这样做有助于减少代码错误并且使得代码更容易阅读。

2、方法重载
方法重载中多个方法名相同,但是参数列表会不一样。另外方法重载其返回值也可能是不一样的。

3、this关键字
this关键字只能在方法内部调用,表示对“调用方法的那个对象的引用”,其应用有三个地方:调用成员变量、调用构造方法、返回对象的值。

4、static关键字
static方法和成员可以在没有创建对象的情况下调用, static方法内部不能调用非静态方法,当一个类加载进虚拟机之后static成员和方法都已经初始化完毕。static不能做用于局部变量,并且static内部不能出现this关键字。

5、垃圾回收
(1)、对象可能不被垃圾回收
(2)、垃圾回收并不等于析构
(3)、垃圾回收至于内存有关

6、初始化
(1)、成员初始化,java保证成员都能够初始化,并且初始化顺序按照成员定义顺序执行。成员在没有指定初始化数据的时候按照自身默认初始化数据进行初始化。
(2)、静态初始化,静态数据或者静态代码块都是在类初次加载的时候进行初始化工作。
(3)、数组初始化,数组是相同类型的一个数据系列,在数组申明的时候会对数组内部每一个元素进行初始化。

7.枚举类型
枚举类型是一个常量集,其取值只能限制在声明的常量范围之内。

第六章.访问权限控制

1、控制访问权限有两个原因:第一是为了使用户不要触碰那些他们不该触碰的代码。第二个原因是为了让类库设计中可以更改类的内部工作方式而不必担心会对客户端造成影响。

2、几个关键字及其作用域

public protected 默认 private
当前类 可访问 可访问 可访问 可访问
同一包 可访问 不可 可访问 不可
子孙类 可访问 可访问 不可 不可
其它包 可访问 不可 不可 不可

第七章.复用类

1、复用类有几种情况,使用类的对象作为成员这种情况也叫做组合,另外一种情况是继承,第三种关系叫做代理。

2、继承
java所有类都直接或间接继承自Object,当一个类继承其父类时会自动得到其父类的属性和方法。虽然继承是OOP思想中一个非常重要的概念,但是在实际开发中需要慎用这一功能,他会使类之间的层次关系变得相当复杂。如果需要在其新的导出类向上转型为
基类则可以使用继承关系。
向上转型:对象既可以作为它本身的类型使用,也可以作为他的基类下使用,这种把对象的引用视为对其基类的引用的做法称为向上转型。



3、初始化基类
在继承体系中类的构造过程是从基类“向外”扩散的,基类在其子类构造器调用之前已经完成其初始化。而且当基类只声明带参构造器时,子类构造器内必须显示调用super并传入相关参数调用其构造器,并且需要在子类构造器起始处就调用super。

4、final关键字
final关键字在Java中使用代表是无法做改变的,其可能用到三种情况:数据、方法和类,定义为final的数据是无法修改的也就是一个用不可改变的常量,定义为final的方法是无法覆盖的,定义为final的类是不可被继承的。
使用final方法的原因:第一个原因是不让其子类覆盖修改,第二关原因是出于效率的考虑。final与private在修饰方法的时候可以同时使用,但是这样使用并没有额外的意义。


第八章.多态
1、方法调用的绑定
在程序调用过程中如果执行程序前进行绑定叫做前期绑定。在运行时根据对象的类型进行绑定叫做后期绑定或者动态绑定,java多态的特征依赖于这一特性。Java中除了static方法和final方(private方法属于final方法)法之外其他所有方法都是后期绑定
当一个方法声明为final、static之后则关闭了其动态绑定的特征。

2、构造器及成员的调用顺序,递归地调用基类的构造器,层层调用直到Object。并且在有成员的情况下是先初始化成员然后再调用构造器。

3、初始化的真实过程
1)、在其他任何事物发生之前,将分配给对象的存储空间初始化为二进制0
2)、调用其基类构造器,如果在基类构造器中调用了普通方法,而普通方法被子类所覆盖,将会看到子类数据都为默认初始化值。
3)、按照声明的顺序调用成员的初始化方法
4)、调用导出类的构造器

4、协变返回类型
Java SE5中添加了协变返回类型,他它表示在导出类中被覆盖的方法可以返回基类方法返回类型的某种导出类型。

5、纯粹的继承与扩展继承
在java中如果子类的接口方法完全与其基类一样,这种方式视为父子间is-a关系,可以通过向上转型,使得基类可以接受发送给导出类的任何消息。扩展继承这种方式是导出类提供基类提供的方法之外的方法,一旦通过向上转型基类不能提供这些导出类的新方法,这种情况称为向上转型丢失掉导出类具体信息。

6、RTTI
程序在运行期会对类型进行检查,这种检查行为称之为“运行时类型识别”(RTTI)




分享给朋友:
您可能感兴趣的文章:
随机阅读: