前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第六章 面向对象编程(基础)

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

作者头像
捞月亮的小北
发布2023-12-01 08:46:26
1460
发布2023-12-01 08:46:26
举报
文章被收录于专栏:捞月亮的小北
image
image

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)。

image
image

其中:

堆(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 类,并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 面向对象内容的三条主线
  • 2. 类和对象
    • 2.1 类和对象概述
      • 2.2 类的成员概述
        • 2.3 面向对象完成具体功能的操作的三步流程(非常重要)
        • 3. 对象的内存笔记
        • 4. 成员变量
        • 5. 方法的重载
        • 6. 封装性
          • 6.1 何为封装性
            • 6.2 Java 如何实现封装
              • 6.3 封装性的体现
              • 7. 类的成员之三 : 构造器
              • 8. JavaBean
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档