【自学笔记】01Java基础-07面向对象基础-01封装

news2024/9/25 3:18:19

记录学习Java基础中有关面向对象编程的基础知识,包括面向对象思想,构造方法,封装思想,JavaBean。

1 面向对象概述

1.1 什么是面向对象编程

严谨来说
  面向对象编程(Object-Oriented Programming,简称 OOP)是一种程序设计范式或编程方法论,它基于“对象”这一核心概念来组织和管理计算机程序的结构。在OOP中,数据和处理这些数据的方法被捆绑在一起,形成了一个称为“对象”的自包含单元。对象是对现实世界实体的一种抽象模拟,它们拥有状态(属性或变量)和行为(方法或函数),通过封装、继承和多态等机制来实现复用、模块化以及灵活的设计。
简单来说:
  对象就是名词,如动物植物,猫狗…面向对象编程,就是拿这些对象进行代码设计。

1.2 什么是类

  类是对象共同特征的描述。对象是类的具体实例。
例如“动物类”下的猫对象,狗对象;也可以是“猫类”下的狸猫对象,橘猫对象;

1.3 如何设计类

  Java中,必须先设计类,才能创建其实例对象
在这里插入图片描述
在这里插入图片描述

1.4 类声明注意事项

在这里插入图片描述

2 构造方法(构造器)

2.1 什么是构造方法(构造器)

  构造方法(Constructor)是面向对象编程语言中的一个特殊成员函数,它与类同名,用于初始化新创建的对象实例的状态。当使用new关键字创建类的一个实例时,构造方法会被自动调用。
  简单来说,构造方法即创建对象的方法
在这里插入图片描述
在这里插入图片描述

2.2 构造方法有什么特点

  1. 构造方法的名称必须与类名完全相同。
  2. 构造方法没有返回类型,包括void类型也不可以声明。
  3. 当创建一个类的新实例时,构造方法会被隐式调用,程序员不能直接调用构造方法。
  4. 如果不显式定义构造方法,编译器会为该类提供一个默认构造方法,这个默认构造方法不带任何参数且不执行任何操作(如果类中没有其他构造方法的话)。
  5. 构造方法可以重载,即在同一个类中可以有多个构造方法,它们之间通过参数列表的不同来区分。

2.3 构造方法的注意事项

在这里插入图片描述

2.4 this关键字

  this,指当前对象的地址

在这里插入图片描述
在这里插入图片描述
在上图代码中,当调用Car()或goWith()方法并传入一个字符串参数时,this.name用于区分成员变量 name和方法参数 name,避免了 同名冲突

3 封装

  面向对象的三大特征:封装,继承,多态
  封装:告诉我们,如何正确设计对象的属性和方法

3.1 什么是封装?

官方回答,理解即可:封装是面向对象编程(OOP)的三大基本特性之一,另外两个是继承和多态。封装的思想主要体现在以下几个方面:

  1. 数据隐藏:封装的核心概念是将对象的状态(属性或数据成员)与操作这些状态的方法(成员函数或方法)结合在一起,并且对外部世界隐藏其内部实现细节。通过设置访问修饰符如private、protected或public,可以控制哪些成员变量能被外部直接访问,哪些不能。

  2. 信息抽象:封装有助于创建一个独立、可复用并且易于理解的组件,该组件提供了一组有限的接口(即公开的方法),用户只需要知道如何使用这些接口,而无需了解它们的具体实现机制。

  3. 提高安全性:通过限制对内部数据的访问,可以防止意外修改或错误地操作数据,从而提高了程序的安全性和稳定性。

  4. 简化设计和维护:由于内部实现的变化不影响到外部调用者,因此在后续的设计和维护阶段,开发者可以在不改变接口的前提下自由修改类的内部实现逻辑。

简单来说,封装就是将相关的数据和行为组合在一起,形成一个统一的、受保护的整体,外部代码只能通过预定义的接口来访问和操作这个整体,而不能直接干预其内部结构和实现细节。
在这里插入图片描述

3.2 如何进行更好的封装?

在这里插入图片描述
在这里插入图片描述

4 JavaBean(重要)

  JavaBean也称为实体类,其对象可以用于在程序中封装数据。
  标准的JavaBean必须满足以下要求:

   1. 成员变量使用 private 修饰。
   2. 提供成员变量对应的 setXxx() / getXxx()方法。
   3. 必须提供一个无参构造器;有参数构造器是可写可不写的。

4.1 一个JavaBean类示例

一个符合JavaBean规范的Student实体类标准示例:

public class Student{
    // 私有成员变量,遵循驼峰命名法(首字母小写,后续单词首字母大写)
    private String studentName;
    // 默认构造器(无参数)
    public Student() {
        // 可以为空,可以初始化默认值或进行其他操作
    }
    // 带参数的构造器,用于实例化时直接设置属性值
    public Student(String name, int age) {
        this.studentName = name;
    }
    
    // Getter方法
    public String getStudentName() {
        return studentName;
    }
    // Setter方法
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
}

在上述Student类中:

  • 类是公共的(public),具有可访问性。
  • 包含私有成员变量(private)。
  • 提供了与每个私有成员变量对应的公共getter和setter方法。
  • 有一个默认的无参数构造器。

5 成员变量和局部变量的区别

在这里插入图片描述

6 面向对象实践案例

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1360033.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发之拖拽事件

一、拖拽涉及的方法 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//拖拽开始.onDragStart((event: DragEvent) > {console.log(drag event onDragStartevent.getX())})//拖拽进入组件范围,需要监听onDrop配合.onDragEnter((event: DragEvent) …

ARCGIS PRO SDK 使用条件管理 Pro UI

ARCGIS PRO UI简单介绍以下&#xff1a; 第一步&#xff1a;在Config.daml中在</AddInfo>标签下加上条件<conditions>标签&#xff08;必须添加的&#xff09; <conditions><!-- 定义条件 &#xff0c;此处定义了两个--Tab 另一个为 group><insert…

【AI视野·今日CV 计算机视觉论文速览 第280期】Mon, 1 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Mon, 1 Jan 2024 Totally 46 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning Vision from Models Rivals Learning Vision from Data Authors Yonglong Tian, Lijie Fan, Kaifeng Chen, Dina K…

Nodejs+express后端学习笔记(1)

1 Node.js安装 1、下载安装包&#xff1a;进入官网&#xff08;https://nodejs.org/en&#xff09;&#xff0c;下载左侧的稳定版。 2、选择安装位置&#xff0c;不用勾选自动安装必要工具。 其他都默认Next。 配置环境&#xff0c;具体参考本文章&#xff1a; https://blo…

java字节码

1. 字节码 1.1 什么是字节码&#xff1f; Java之所以可以“一次编译&#xff0c;到处运行”&#xff0c;一是因为JVM针对各种操作系统、平台都进行了定制&#xff0c;二是因为无论在什么平台&#xff0c;都可以编译生成固定格式的字节码&#xff08;.class文件&#xff09;供…

二叉树的直径,力扣

目录 题目地址&#xff1a; 题目&#xff1a; 我们直接看题解吧&#xff1a; 审题目事例提示&#xff1a; 解题方法&#xff1a; 难度分析&#xff1a; 解题方法分析&#xff1a; 解题分析&#xff1a; 补充说明&#xff1a; 代码优化&#xff1a; 题目地址&#xff1a; 543. 二…

​电脑技巧:​笔记本电脑电流声的原因和解决方案

目录 一、音频设备接口接触不良 二、笔记本电源问题 三、笔记本电脑驱动程序问题 四、音频硬件问题 五、操作系统内部电磁干扰 六、最后总结 大家在日常生活当中&#xff0c;笔记本电脑已经成为我们工作、学习和娱乐的重要工具。但有时我们在使用过程中可能会遇到一个令人…

MySQL-数据库概述

数据库相关概念&#xff1a; 数据库(DateBase)简称DB,就是一个存储数据的仓库&#xff0c;数据有组织的进行存储。 数据库分为关系型数据库简称RDBMS和非关系型数据库 关系型数据库简称RDBMS:建立在关系模型的基础上&#xff0c;由多张相互连接的二维表组成的数据库.简单来说…

项目整合积木报表-设计页面

项目整合积木报表-设计页面 <template><div><iframe id"dome" :srcsrc ></iframe></div> </template><script>export default {data(){return{src:configSrc.src"/jmreport/view/836138868821839872"}}} </…

CentOS 7.6下的HTTP隧道代理配置详解

在CentOS 7.6操作系统中&#xff0c;配置HTTP隧道代理需要一定的技术知识和经验。下面我们将详细介绍如何配置HTTP隧道代理&#xff0c;以确保网络通信的安全性和稳定性。 首先&#xff0c;我们需要了解HTTP隧道代理的基本原理。HTTP隧道代理是一种通过HTTP协议传输其他协议数…

Android 正圆

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"wrap_content"android:layout_height"wrap_content"android:padding&…

遥感影像-语义分割数据集:山体滑坡数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该遥感滑坡数据集由卫星光学图像、滑坡边界的形状文件和数字高程模型组成。该数据集中的所有图像&#xff0c;即770张滑坡图像&#xff08;红点&#xff09;和2003张非滑坡图像&#xff0c;都是从2018年5月至8月拍摄的TripleSat卫星图像中截取…

NGUI基础-三大基础控件之Sprite精灵图片

目录 Sprite是什么 如何创建Sprite 参数相关 Atlas Sprite Material Fixed Aspect Type Simple(普通模式&#xff09; Sliced(切片模式&#xff09; Tiled(平铺模式&#xff09; Filled(填充模式&#xff09; 常见的填充模式有以下几种&#xff1a; Advanced(高级…

Java IO知识点

1. Java IO IO&#xff0c;即输入&#xff08;in&#xff09;和输出&#xff08;out&#xff09;&#xff0c;指应用程序和外部设备之间的数据传递&#xff0c;常见的外部设备包括文件、管道、网络连接。Java 中是通过流处理 IO 的&#xff0c; 那么什么是流&#xff1f; 流…

AcWing 861. 二分图的最大匹配—匈牙利算法

题目链接:AcWing 861. 二分图的最大匹配 问题描述 分析 该题是一道典型的二分图匹配模板题&#xff0c;求解最大匹配数&#xff0c;可以用匈牙利算法来解决&#xff0c;下面举一个例子来说明匈牙利算法是如何运行的 以该图为例&#xff0c;其中 1可以匹配a,c 2可以匹配a,b 3…

Docker-Compose部署Redis(v7.2)哨兵模式

文章目录 一、前提准备1. 主从集群2. 文件夹结构 二、配置文件1. redis server配置文件2. redis sentinel配置文件3. docker compose文件 三、运行四、测试 环境 docker desktop for windows 4.23.0redis 7.2 一、前提准备 1. 主从集群 首先需要有一个redis主从集群&#x…

C++ 实现对战AI五子棋

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 为了能够快速上手一门语言&#xff0c;我们往往在学习了基本语法后&#x…

【自学笔记】01Java基础-09Java关键字详解

介绍java&#xff08;基于java11&#xff09;中所有关键字&#xff0c;以及主要重要的关键字详解。 1 Java 11中的关键字&#xff1a; 1.1 类型声明与变量定义 boolean&#xff1a;声明布尔类型变量&#xff0c;只有两个可能值 true 或 false。byte&#xff1a;声明一个8位有…

[UUCTF 2022 新生赛]ez_rce

[UUCTF 2022 新生赛]ez_rce wp 在做这道题时&#xff0c;我参考了这篇博客&#xff1a; https://www.cnblogs.com/bkofyZ/p/17594549.html 认识到了自己的一些不足。 题目代码如下&#xff1a; <?php ## 放弃把&#xff0c;小伙子&#xff0c;你真的不会RCE,何必在此纠…

实验笔记之——基于COLMAP的Instant-NGP与3D Gaussian Splatting的对比

之前博客进行了COLMAP在服务器下的测试 实验笔记之——Linux实现COLMAP-CSDN博客文章浏览阅读794次&#xff0c;点赞24次&#xff0c;收藏6次。学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客NeRF 所做的任务是 Novel View Synthesis&#xf…