首页 > 编程语言 >第六章 面向对象编程(基础)

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

时间:2023-06-04 18:44:41浏览次数:42  
标签:Java 变量 对象 成员 修饰符 基础 面向对象编程 第六章 方法

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

其中:

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

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

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

4. 成员变量

  • 语法格式:
[修饰符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. 类的成员之三 : 构造器

构造器也被称为构造方法

语法格式:

[修饰符] 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 类,并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来。

标签:Java,变量,对象,成员,修饰符,基础,面向对象编程,第六章,方法
From: https://www.cnblogs.com/NorthPoet/p/17456075.html

相关文章

  • NOI / 1.9编程基础之顺序查找 05:最大值和最小值的差
    描述输出一个整数序列中最大的数和最小的数的差。输入第一行为M,表示整数个数,整数个数不会大于10000;第二行为M个整数,以空格隔开,每个整数的绝对值不会大于10000。输出输出M个数中最大值和最小值的差。样例输入525742样例输出5题意输入M,表示整数个数,再输入M个整......
  • 第七章 面向对象编程(进阶)
    1.this关键字‍1.1this的含义‍在Java中,this关键字不算难理解,它的作用和其词义很接近。它在方法(准确的说是实例方法或非static的方法)内部使用,表示调用该方法的对象它在构造器内部使用,表示该构造器正在初始化的对象。this可以调用的结构:成员变量、方法和构......
  • Web安全-渗透测试-基础知识01
    1.域名定义:域名(英语:DomainName),又称网域,是由一串用点分隔的名字组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识.因为ip地址不方便记忆.而且不能显示地址组织的名称和性质,所以用域名也可以定位到响应的up,可简单理解为是ip地址的另一个称呼......
  • P2P技术基础: 关于TCP打洞技术
    4关于TCP打洞技术建立穿越NAT设备的p2p的TCP连接只比UDP复杂一点点,TCP协议的“打洞”从协议层来看是与UDP的“打洞”过程非常相似的。尽管如此,基于TCP协议的打洞至今为止还没有被很好的理解,这也造成了对其提供支持的NAT设备不是很多。在NAT设备支持的......
  • adm-jclass: 一个面向对象编程的js库
    [url]https://code.google.com/p/adm-jclass/[/url]:Ajavascriptlibrarythatallowshighlyobject-orientedapplicationprogramminginyourbrowser.介绍:[url]https://code.google.com/p/adm-jclass/wiki/jClassDocumentation[/url]jClassisa......
  • python基础学习-读写CSV文件
    CSV文件介绍参考:Python-Core-50-Courses/第23课:用Python读写CSV文件.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)CSV 全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据......
  • python基础学习-发送邮件
    importsmtplibfromemail.headerimportHeaderfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMEText"""发送普通邮件"""#创建邮件主体对象email=MIMEMultipart()#设置发件人、收件人和主题email['From']=&#......
  • python基础学习-XPath解析html
    参考地址:Python-Core-50-Courses/第33课:用Python解析HTML页面.mdatmaster·jackfrued/Python-Core-50-Courses(github.com) XPath是在XML(eXtensibleMarkupLanguage)文档中查找信息的一种语法,XML跟HTML类似也是一种用标签承载数据的标签语言,不同之处在于XML的标签......
  • python基础学习-字典
    """字典dict定义:元素是键值对,key不能重复,不能使用下标索引,key是除字典外其他类型,value为任意类型,可嵌套,可修改,支持for循环,不支持while循环#字面量{key:value,key:value,key:value}#定义变量变量名称={key:value,key:value,key:value}#定义空列表变量名称=dict()......
  • opcenter camstar designer基础知识--事件
    1.事件1.1CDO事件 1.2Field事件 1.3ListField事件 ......