Java核心技术 卷1 第四章总结

1.面向对象程序设计(OOP)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术。传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题。名言——算法+数据结构=程序,就是对面向过程程序设计的经典总结。在这种设计范式中,算法是第一位的,数据结构是第二位的,也就是首先要确定如何操作数据,然后再决定如何组织数据,以便于数据操作(我觉得这句话说出了数据结构的本质)。然而OOP却调换了次序,将数据放在了第一位,然后再考虑操作数据的算法。

2.对于一些规模较小的问题,将其分解为过程的开发方式比较理想。而面向对象更加适用于解决规模较大的问题。(可能这就是为什么有些要求高性能、实时性强的大规模软件必须用C++来开发了,比如浏览器内核、JVM和游戏引擎等等。因为C++集合了面向对象和C语言的特性。)

3.类(class)是构造对象的模板或蓝图。对象是类的一个实例(instance)。对象中的数据称为实例域(instance field),操纵数据的过程称为方法(method)。类实现了封装(encapsulation)的特性,也称为数据隐藏,即外部使用者不知道具体数据的实现方式。

4.类之间的关系最常见的分为三种:

  • 依赖(use-a),即一个类的方法需要以另一个类的对象为参数,来操纵这个对象,这个类就依赖于这另一个类。
  • 聚合(has-a),即一个类中包含另一个类的对象。
  • 继承(is-a), 这个最好理解,就是继承关系。    

5.局部变量不会自动地初始化为null,而必须通过调用new或将它们设置为null进行初始化。

6.Java的对象变量可以看做是C++的对象指针。其实我觉得,Java中的引用就是一个功能受限了的指针。

7.因为C++有运算符重载机制,可以直接重载运算符来实现对象的拷贝。而在Java中只能通过clone方法获得对象的完整拷贝,引用间的赋值只会使两个引用同时指向同一个对象。

8.在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。即使这些类处于同一个源文件,但编译后就会分成多个class文件,一个类构成一个class文件。

9.Java编译器内置了“make”功能。即它会自动去找相关的class文件,而不用使用者主动写明。(太先进了!)

10.每个非静态类方法都有一个隐式参数,就是this,是调用这个方法的对象的引用。

11.Java中所有的方法都必须在类的内部定义。而在C++中,如果这么做就表明这个函数是内联(inline)函数。Java中不是如此。

12.不要编写返回引用可变对象的访问器方法,这会破坏了封装性。如果必须这么做,就应该返回可变对象的克隆(clone),即调用它的clone方法。

13.可以将实例域定义为final。构建对象时必须初始化这样的域。final修饰符通常应用于基本(primitive)类型域,或不可变(immutable)类的域,例如String。如果用来修饰可变类的域,容易引起混乱,因为这个引用所指向的对象实际上还是可变。

14.静态域和静态方法属于整个类,而不是单独属于每个对象。静态方法因为没有隐式this参数,只能访问静态域。而非静态方法可以访问静态域。静态方法还常用于工厂方法。

15.Java总是采用按值调用。也就是,方法得到的是所有参数值的一个拷贝。方法参数共有两种类型:基本数据类型和对象引用。基本数据类型很好理解。就是对象引用有点问题。就是我们的确不能修改传过来的对象引用的值,即让它引用另一个对象,但是我们是可以通过这个引用来修改它所指向的对象的内容的。

16.方法名、参数类型和类型的顺序合起来称为方法的签名(signature)。返回类型不是方法签名的一部分,也就是,不能有两个名字相同,参数类型相同却返回类型不同的方法。

17.关于Java的对象构造,对于我来说有较多的新内容。我打算另写一篇文章单独说明。

18.关于包和类路径的更是全新学习,需要另写一篇文章来说明。

19.JDK的API文档是通过对标准Java类库的源代码运行javadoc生成的。

20.类设计技巧:

  • 一定要保证数据私有
  • 一定要对数据初始化
  • 不要在类中使用过多的基本类型
  • 不是所有的域都需要独立的域访问器和域更改器
  • 将职责过多的类进行分解
  • 类名和方法名要能够体现它们的职责

你可能感兴趣的:(Java基础学习总结)