Core Java Volume I 读书笔记--第4章 对象与类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyaohuqijun/article/details/78021794
4.1 面向对象程序设计概述

 

算法 + 数据结构 = 程序

传统的结构化程序设计通过设计一系列过程(即算法)来解决问题, 算法是第一位的, 数据结构是第二位的;

OOP中优先考虑数据结构, 先设计数据的结构(类),其次再向类中添加一系列操作

 

类是构造对象的模板或者蓝图。 由类构造对象的过程称为创建实例。

封装:将数据和行为组合在一个包中,并对对象的使用的者隐藏数据的实现方式

继承:通过扩展一个类来建立另外一个类的过程

 

要使用OOP,一定要清楚对象的三个主要特性

行为: 可以对对象施加哪些操作(方法)

状态: 当施加那些方法是,对象如何响应

标识: 如何辨别具有相同行为,状态的不同对象?

 

OOP 第一步:识别类

识别类的简单规则是分析问题的过程中寻找名称,而方法对应着动词

 

类之间的关系:

依赖(uses - a) : 类的方法操作另一个类的对象

聚合(has-a ): 一个类对象中包含另外的类对象

继承(is-a) : 通过扩展一个类实现新的类

UML  类图是设计类,描述类关系的好方法

 

 

4.2 使用预定义类

 

注意对象变量和实际对象的差异,  对象变量存储的是实际对象的引用。

Java 中国的对象变量与C++对象指针概念类似。

PS. 在HotSpot 虚拟机中, 引用就是指针


4.3用户自定义类

 

 在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类;

 

非静态方法都有一个隐式参数this,表示调用该方法的对象;

 

一个方法可以访问所属类的所有对象的数据,包括私有数据;

 

final 一般应用于基本类型域,或者不可变类型域,如String;

 

 

OOP 中数据结构优先,而定义类的能力就允许用户自定义数据结构。

 

4.4 静态域和静态方法

 

使用static修饰的域,为静态域,又称为类域。  类域属于类,所有对象共享该类域,即使一个对象都不存在, 类域也存在;

静态变量比较少见, 静态常量使用的比较多。

 

静态方法又称为类方法,静态方法没有this 指针, 和对象没有关系

 

静态域和静态方法都属于类, 而和对象没有什么关系,  不需要创建对象即可使用。 Java 中任何代码中必须存在于Class 中, 而存在一些没有对象而需要执行相应代码的情况, 这个时候就需要static了。

实际上, 个人认为静态方法最开始应该是Java 为main 方法开的后门(没有一个对象, 却需要执行一个方法, 明显不符合Java强面向对象的风格)

 

4.5 方法参数

 

Java 程序设计语言总是采用按值调用,也就是说,方法的形参是实际参数的一个拷贝

 

4.6 对象构造

 

方法名以及参数类型统称为方法的签名, 签名是方法的唯一标识。

所以存在有相同名字,不同参数的方法, 这种特性叫做重载

 

如果编写一个类时,没有任何构造器,系统会提供一个默认构造器(无参构造器);

 

类初始化的方法:

1.      在域声明中赋值

2.      初始化块

3.      构造器

构造器中可以在第一行通过this(…)调用另一构造器,  这种this 的另外一种含义(第一种含义, 方法中的隐式参数)

 

调用构造器的步骤:

1.      所有数据域被初始化为默认值(0,false,或者null);

2.      按照在类中声明的顺序,依次执行所有域初始化语句和初始化块;

3.      如果构造器第一行调用了第二个构造器,则执行第二个构造器主体;

4.      执行第一个构造器主体;

 

实际上,当一条new 指令被执行时, 有以下几个步骤(参考《深入理解JAVA虚拟机》):

1.      检查类是否已加载, 没有则加载类;

2.      分配对象空间, 并将对象的实例数据部分置为0;

3.      填充对象头

4.      执行代码中初始化语句,按照初始化语句,初始化块,构造函数的顺序

   

 

4.7包

包作用域: 如果没有指定public或者private,这个部分(类,方法,变量)可以被同一个包中的所有方法访问;

 

4.10  类设计技巧

 

1.      一定要保证数据私有

2.      一定要对数据初始化

3.      不要在类中使用过多的基本类型(过多的基本类型可以用一个类来封装)

4.      不是所有的域都需要独立的域访问器和域更改器

5.      将职责过多的类进行分解

6.      类名和方法要能体系它们的职责


没有更多推荐了,返回首页