第六章 面向对象编程(基础)

2023-12-01 08:46:26 浏览数 (1)

1. 面向对象内容的三条主线

  • Java 类以及类的成员 : 属性 , 方法 , 构造器 , 代码块 , 内部类
  • 面向对象的特征 : 封装 , 继承 , 多态
  • 面向对象的关键字 : this、super、package、import、static、final、interface、abstract 等

2. 类和对象

2.1 类和对象概述

类 : 具有相同特征的事务的抽象描述 , 是抽象的 , 概念上的定义

理解 : 以人进行举例

  • 类 ——> 抽象概念的人 ;
  • 对象 ——> 实实在在的某个人

对象 : 实际存在的该类事物的每个个体 , 是具体的 , 所以也称为实例(instance)

2.2 类的成员概述

面向对象程序设计的重点是类的设计

类的设计,其实就是类的成员的设计

类时一组相关属性和行为的集合 , 这也是类最基本的两个成员

属性 : 该事务的状态信息。 对应类中的成员变量

  • 成员变量 ——> 属性 ——> Field

行为 :该类事物要做什么操作,或者基于事物的状态能做什么。对应类中的成员方法

  • (成员)方法 <=> 函数 <=> Method

2.3 面向对象完成具体功能的操作的三步流程(非常重要)

  • 步骤 1:创建类,并设计类的内部成员(属性、方法)
  • 步骤 2:创建类的对象。比如:Phone p1 = new Phone();
  • 步骤 3:通过对象,调用其内部声明的属性或方法,完成相关的功能

3. 对象的内存笔记

HotSpot Java 虚拟机的架构图如下。其中我们主要关心的是运行时数据区部分(Runtime Data Area)。

其中:

堆(Heap)​:此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在 Java 虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。

栈(Stack)​:是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。

方法区(Method Area)​:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

4. 成员变量

  • 语法格式:
代码语言:javascript复制
[修饰符1] class 类名{
    [修饰符2] 数据类型 成员变量名 [= 初始化值];
}
  • 说明:
    • 位置要求:必须在类中,方法外
    • 修饰符 2(暂不考虑)
      • 常用的权限修饰符有:private、缺省、protected、public
      • 其他修饰符:static、final
    • 数据类型
      • 任何基本数据类型(如 int、Boolean) 或 任何引用数据类型。
    • 成员变量名
      • 属于标识符,符合命名规则和规范即可。
    • 初始化值
      • 根据情况,可以显式赋值;也可以不赋值,使用默认值

5. 方法的重载

  • 方法重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可。
    • 参数列表不同,意味着参数个数或参数类型的不同
  • 重载的特点:与修饰符、返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
  • 重载方法调用:JVM 通过方法的参数列表,调用匹配的方法。
    • 先找个数、类型最匹配的
    • 再找个数和类型可以兼容的,如果同时多个方法可以兼容将会报错

6. 封装性

面向对象的开发原则要遵循“高内聚、低耦合​”

高内聚、低耦合是软件工程中的概念,也是 UNIX 操作系统设计的经典原则。

内聚,指一个模块内各个元素彼此结合的紧密程度;耦合指一个软件结构内不同模块之间互连程度的度量。内聚意味着重用和独立,耦合意味着多米诺效应牵一发动全身

而“高内聚,低耦合”的体现之一:

  • 高内聚​:类的内部数据操作细节自己完成,不允许外部干涉;
  • 低耦合​:仅暴露少量的方法给外部使用,尽量方便外部调用。

6.1 何为封装性

把该隐藏的隐藏起来 , 该暴露的暴露出来 , 这就是封装性的设计思想

6.2 Java 如何实现封装

  • 实现封装就是控制类或成员的可见性范围。这就需要依赖访问控制修饰符,也称为权限修饰符来控制。
  • 权限修饰符:public​、protected​、缺省​、private​。具体访问范围如下:

修饰符

本类内部

本包内

其他包的子类

其他包非子类

private

×

×

×

缺省

×

×

protected

×

public

  • 具体修饰的结构:
    • 外部类:public、缺省
    • 成员变量、成员方法、构造器、成员内部类:public、protected、缺省、private

6.3 封装性的体现

成员变量/属性私有化

概述:私有化类的成员变量,提供公共的 get 和 set 方法,对外暴露获取和修改属性的功能。

实现步骤:

使用 private​ 修饰成员变量

提供 getXxx​ 方法 / setXxx​ 方法,可以访问成员变量

成员变量封装的好处:

  • 让使用者只能通过事先预定的方法来访问数据​,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性。
  • 便于修改​,提高代码的可维护性。主要说的是隐藏的部分,在内部修改了,如果其对外可以的访问方式不变的话,外部根本感觉不到它的修改。例如:Java8->Java9,String 从 char[]转为 byte[]内部实现,而对外的方法不变,我们使用者根本感觉不到它内部的修改。

注意:

开发中,一般成员实例变量都习惯使用 private 修饰,再提供相应的 public 权限的 get/set 方法访问。

对于 final 的实例变量,不提供 set()方法。(后面 final 关键字的时候讲)

对于 static final 的成员变量,习惯上使用 public 修饰。

7. 类的成员之三 : 构造器

构造器也被称为构造方法

语法格式:

代码语言:javascript复制
[修饰符] class 类名{
    [修饰符] 构造器名(){
    	// 实例初始化代码
    }
    [修饰符] 构造器名(参数列表){
        // 实例初始化代码
    }
}

说明:

  1. 构造器名必须与它所在的类名必须相同。
  2. 它没有返回值,所以不需要返回值类型,也不需要 void。
  3. 构造器的修饰符只能是权限修饰符,不能被其他任何修饰。比如,不能被 static、final、synchronized、abstract、native 修饰,不能有 return 语句返回值。

8. JavaBean

  • JavaBean 是一种 Java 语言写成的可重用组件。
    • 好比你做了一个扳手,这个扳手会在很多地方被拿去用。这个扳手也提供多种功能(你可以拿这个扳手扳、锤、撬等等),而这个扳手就是一个组件。
  • 所谓 JavaBean,是指符合如下标准的 Java 类:
    • 类是公共的
    • 有一个无参的公共的构造器
    • 有属性,且有对应的 get、set 方法
  • 用户可以使用 JavaBean 将功能、处理、值、数据库访问和其他任何可以用 Java 代码创造的对象进行打包,并且其他的开发者可以通过内部的 JSP 页面、Servlet、其他 JavaBean、applet 程序或者应用来使用这些对象。用户可以认为 JavaBean 提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
  • 《Think in Java》中提到,JavaBean 最初是为 Java GUI 的可视化编程实现的。你拖动 IDE 构建工具创建一个 GUI 组件(如多选框),其实是工具给你创建 Java 类,并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来。

0 人点赞