《Java 核心技术:卷Ⅰ》—学习笔记2

时间:2023-02-24 21:42:23

 

第四章 对象和类

(网络资料https://blog.csdn.net/world_snow/article/details/78831127)

对象:对象就是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个实体都是一个对象,所以对象是一个具体的概念。

类: 具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。

 

1.类构造( construct ) 对象的过程称为创建类的实例( instance )

2.封装 (encapsulation , 有时称为数据隐藏):将数据和行为组合在一个包中,对对象的使用者隐藏了数据的实现方式。实现封装的关键在于绝对不能让类中的方法直接地访问其他类的实 例域。

3.实例域 (instance field):对象中的数据

4.方法( method ):操纵数据的过程

5.对象的3个特征:

状态( state ):描述当前特征的信息。对象状态的改变必须通过调用方法实现(如果不经过方法调用就可以改变对象状态,只能说明封装性遭到了破坏)。

标识( identity ):用来唯一的表示对象

行为( behavior ):

 

6.怎么识別类:简单规则是在分析问题的过程中寻找名词,而方法对应着动词。

7.类之间的关系:

依赖( dependence ),即 “ uses - a ”关系:如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。

聚合( aggregation ),即 “ has - a ”关系:聚合关系意味着一个类的对象包含另一个类的对象。

继 承 ( inheritance ),即 “ is - a ”关系:

 

8.构造对象:构造并初始化对象使用一种叫做构造器( constructor)的特殊方法。构造器的名字应该与类名相同。

语法:类名称 变量名 = new 构造器名();  该语法包含了3个动作:定义变量、构造对象、引用对象。

// 对象变量不等于对象,一个对象变量并没有实际包含一个对象,而仅仅通过初始化引用一个对象。变量引用一个已存在的对象后,才能使用类中的方法。

 

9.可以显式地将对象变量设置为 null , 表明这个对象变量目前没有引用任何对象。将一个方法应用于一个值为 null 的对象上会产生运行时错误。

10.Date(), LocalDate()类

 

4.3 自定义类

1.关键字 public 意味着任何类的仟何方法都可以调用这些方法。

2.关键字 private 确保只有 Employee 类自身的方法能够访问这些实例域,而其他类的方法不能够读写这些域。

3.在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。这是因为文件名必须与 public 类的名字相匹配。

4.构造器与类同名。在构造类的对象时,构造器会运行,以便将实例域初始化为所希望的状态。

5.构造器总是伴随着 new 操作符的执行被调用,而不能用于对一个已经存在的对象重新设置实例域。

6.每个类可以有一个以上的构造器。构造器可以有0个、1个或多个参数。构造器没有返回值。

7.所有的 Java 对象都是在堆中构造的。

8.不要在构造器中定义与实例域重名的局部变量。

9.方法用于操作对象以及存取它们的实例域。

10.方法的隐式( implicit ) 参数:是出现在方法名前的Employee 类对象。可以用关键词this表示

11.方法的显式( explicit ) 参数。:位于方法名后面括号中的数值

12.在 Java 中,所有的方法都必须在类的内部定义,但并不表示它们是内联方法。是否将某个方法设置为内联方法是 Java 虚拟机的任务。即时编译器会监视调用那些简洁、经常被调用、没有被重栽以及可优化的方法。

13.访问器方法:

14.更改器方法:

15.final 实例域:将实例域定义为 final , 构建对象时必须初始化这样的域。也就是说,必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改。

16.若将final用于可变对象,则对象引用不会再指示其他对象,但这个对象可以更改。

 

4.4 静态域和静态方法

(网络资料https://www.cnblogs.com/dolphin0520/p/3799052.html) Java中的static关键字解析

1.将域定义为 static , 每个类中只有一个这样的域。

2.即使没有一个对象,静态域也存在。它属于类,而不属于任何独立的对象。

3.而每一个对象对于所有的实例域却都有自己的一份拷贝。

4.静态方法:一种不能向对象实施操作的方法。可以认为静态方法是没有 this 参数的方法

5.在下面两种情况下使用静态方法:

•方法不需要访问对象状态,其所需参数都是通过显式参数提供。
• 方法只需要访问类的静态域。

6.工厂方法:

7.main方法:

 

4.5 方法参数

1.按值调用 (call by value ) 表示方法接收的是调用者提供的值。而按引用调用 (call by reference )表示方法接收的是调用者提供的变量地址。

2.Java 程序设计语言总是采用按值调用。方法不能修改传递给它的任何参数变量的内容。

3.Java 中方法参数的使用情况:

• 一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
•一 个方法可以改变一个对象参数的状态。
•一 个 方法不能让对象参数引用一个新的对象。

 

4.6 对象构造

1.有些类有多个构造器。

2.重载(overloading ):多个方法有相同的名字、不同的参数

3.重载解析 (overloading resolution ):编译器通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配,来挑选出相应的方法的过程。

4.方法的签名( signature ):由于Java 允许重栽任何方法,而不只是构造器方法。因此,要完整地描述一个方法,需要指出方法名以及参数类型。

5.返回类型不是方法签名的一部分。也就是说,不能有.两个名字相同、参数类型也相同却返回不同类型值的方法。

6. 默认域初始化:如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:数值为0、布尔值为 false 、对象引用为 null 。这是域与局部变量的主要不同点。

7.当且仅当类没有提供任何构造器的时候,系统会提供一个默认的无参数构造器。这个构造器将所有的实例域设置为默认值。

8.若类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。

9.可以在类定义中,直接将一个值赋给任何域。

10.参数变量用同样的名字将实例域屏蔽起来。

11.调用另一个构造器:

12.初始化块(initialization block ):

13.调用构造器的具体处理步骤:

1 ) 所有数据域被初始化为默认值(0、 false 或 null )。

2 ) 按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块。

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

4 ) 执行这个构造器的主体

 

4.7 包

1.包( package ):将类组织起来的层次结构。

2.使用包的主要原因是确保类名的唯一性。

3.从编译器的角度来看,嵌套的包之间没有任何关系。每一个都拥有独立的类集合。例如 ,java.util 包与 java.util.jar 包毫无关系。

4.一个类可以使用所属包中的所有类,以及其他包中的公有类(public class )。

5.访问包的两种方式:1)在每个类名之前添加完整的包名。2)使用 import 语句导入。

6.使用 import 语句可以导入一个特定的类或者整个包。 import 语句应该位于源文件的顶部(但位于 package 语句的后面)。

7.注意,只能使用星号(* ) 导入一个包,而不能使用 import java .*或import java .*.*导人以 java 为前缀的所有包。

8.在包中定位类是编译器( compiler ) 的工作。类文件中的字节码肯定使用完整的包名来引用其他类。

9.import 语句不仅可以导人类,还增加了导入静态方法和静态域的功能。

10.将类放入包中:要想将一个类放人包中,就必须将包的名字放在源文件的开头,包中定义类的代码之前。

 

4.8 类路径

1.类存储在文件系统的子目录中。类的路径必须与包名匹配。

2.类文件也可以存储在 JAR ( Java 归档)文件中。

3.在一个 JAR 文件中,可以包含多个压缩形式的类文件和子目录。

。。。略

 

4.9 文档注释

1.JDK 包含一个很有用的工具,叫做 javadoc , 它可以由源文件生成一个 HTML 文档。如果在源代码中添加以专用的定界符/**开始的注释,那么可以很容易地生成一个看上去具有专业水准的文档。这种方式可以将代码与注释保存在一个地方。由于文档注释与源代码在同一个文件中,在修改源代码的同时,重新运行 javadoc 就可以轻而易举地保持两者的一致性。

2.注释的插入:javadoc 实用程序( utility ) 从下面几个特性中抽取信息:

•包
•公有类与接口
•公有的和受保护的构造器及方法
•公 有的和受保护的域

 

3.注释应该放置在所描述特性的前面。注释以/**开始,并以*/结束。每个/**...*/文构注释在标记之后紧跟着*格式文本( free-form te x th 标记由@开始,如 @author 或 © param.j

4.类注释:类注释必须放在 import 语句之后,类定义之前。

5.方法注释:每一个方法注释必须放在所描述的方法之前。除了通用标记之外,还可以使用下而的标记:@ param 变量描述、@return 描述、@ throws类描述

6.域注释:只需要对公有域(通常指的是静态常量)建立文档。

7.通用注释:下面的标记可以用在类文档的注释中:@author 姓名、@version 文本、@since 文本、@deprecated 文本、@see 引用

8.包与概述注释:可以直接将类、方法和变量的注释放置在 Java 源文件中,只要用/**...*/文档注释界定就可以了。但是,要想产生包注释,就需要在每一个包目录中添加一个单独的文件。

9.注释的抽取:

 

4.10 类设计技巧

1.一定要保证数据私有

2. —定要对数据初始化

3. 不要在类中使用过多的基本类型

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

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

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

7. 优先使用不可变的类