JavaSE - 面向对象编程01

01 什么是面向对象编程(oop)

答:就是只关心对象之间的交互,而并不关心任务是怎样具体完成的。例如把一个大象放进冰箱需要几步?如果是面向对象编程只会思考冰箱和大象之间的交互,那么给出的答案就是:把冰箱门打开,把大象放进冰箱,把冰箱门关闭。如果是面向过程编程则会思考,如果把大象一整个放进冰箱是不可能的,只能把它剁了才可能装进去,那么先剁哪个部位呢等一些过程问题。

02 面向对象编程(oop)的好处

答:在祖师爷看来一切实体皆对象。在现实生活中我们要干什么事时其实都是让一个个对象去完成的,例如,你想去哪里可以利用汽车这个对象通过它的载人功能来实现、你想和你的朋友通话可以利用手机这个对象通过它的通话功能来实现。在面向对象编程中也是如此,计算机是用来处理数据的,如果我们想要处理学生的数据可以利用学生这个对象来处理,如果我们想要处理汽车的数据可以利用汽车这个对象来处理。总之凡是使用面向对象编程的套路,更符合人类的思维习惯,也会使得编程更加简单,直观。

03 什么是类,什么是对象

答:Java中一切实体皆对象,类使用来描述对象的。可以简单理解为类是一个模板,而对象是模板的具体表现。C语言中描述一个复杂的对象用的是结构体,而Java和C++中用的是类。

04 类和对象的区别

答:① 类使用来描述对象的,一个类可以实例化无数个对象 ② 类不占用具体的内存空间,对象占用具体的内存空间

05 怎样面向对象编程(oop)

答:例如我们要处理汽车的数据时,① 首先先通过class关键字创建出汽车类,即描述汽车的模板 ② 通过new关键字实例化出具体的汽车对象 ③ 对对象的数据进行封装 ④ 调用类中的方法对对象的数据进行处理 (哪个对象调用的方法,处理的就是哪个对象的数据)。总之,在处理一个具体的业务时我们的编程思路是:① 找对象,即确认我们要处理哪些对象的数据 ② 创建对象的模板,即创建类 ③ 实例化对象 ⑤ 调用相关方法对对象的数据进行处理。 

06 怎样定义一个类

【1】语法格式:

【2】注意事项:

   ① 一个Java文件中定义几个类的问题:一个Java文件中可以定义多个类,但只能有一个被public修饰的主类,且主类类名必须与所在的Java文件名保持一致。不过我们在开发时通常只会在一个Java文件中写一个类,使用idea创建Java文件时,idea会自动为我们在Java文件里面创建一个被public修饰且类名与所在Java文件名一致的主类。

   ② 类的修饰符问题:类只能被public修饰或不被修饰,其他的修饰符是不能修饰类的。被public修饰的类可以在任意包下被访问到(不同包下要导包),不被修饰的类只能在同一个包下被访问到。

   ③ 如何修改类名:不要轻易修改public修饰的主类类名,如果非要修改可以通过开发工具进行修改,且通过开发工具修改类名有一个前提:这个类所在的java文件只能有一个类存在(这个类就是我们想去修改类名的主类)。具体修改步骤如下:右键单机该类所在的java文件 -- 》选择refactor --》选择rename --》修改即可。

  ④ 类名命名格式:Java文件名和类名采用的都是大驼峰的方式命名。

  ⑤ 类中包含的内容:一个类中可以包含五大板块的内容,我们可以根据实际的需求定义这些板块,并不需要都写上。

  ⑥ 成员变量本身存在默认值,在定义成员变量时一般不需要进行初始化赋值(没有意义)。

07 怎样实例化对象

【1】语法格式:new + 构造器;

【2】实例化举例:

   ① 实例化数组时,int[] array = new int[]{1,2,3,4,5}; 或int[] array = new int[10];

   ② 使用从键盘读入操作之前,会实例化一个Scanner类的对象,Scanner scan = new Scanner();

   ③ WashMachine washMachine = new WashMachine();

【3】注意事项:

   ① 实例化出的对象在内存中的存储位置:使用new关键字实例化的对象都存储在虚拟机的堆区,我们可以通过实例化多个对象,但也要注意堆区的内存是有限的。

   ② 实例化代码可以写在哪里:写在自己或其他类的成员变量的位置,用于就地初始化引用类型的成员变量;自己或其他类的成员方法,代码块,内部类中也可以写。

   ③ 对象和对象之间的数据是不会相互影响的,但如果有多个引用指向同一个对象则会相互影响。

   ④ 如果某个对象没有一个对象引用它,则这个对象会被系统认为是垃圾对象,且Java中存在垃圾回收机制,会自动清理掉垃圾对象,我们并不需要关心它。

【4】匿名对象:例如:

    OuterClass out = new OuterClass() 和 new OuterClass(),后者是匿名对象只能被使用一次。

08 计算机如何执行面向对象的程序

【1】前置知识:计算机是通过虚拟机中的栈区,堆区,方法区配合来执行面向对象程序的。

【2】实例分析:

  ① 将调用main方法的Test类加载到方法区中。

  ② 在栈区为main方法开辟栈帧空间。

  ③ 执行main方法的第一行代码:检测到会用到Student类于是会先将Student类加载到方法区中。接着在main方法的栈帧中为局部变量s1开辟空间。然后在堆区开辟一块内存空间存放new出来的学生对象。这个学生对象的地址存放在局部变量s1中 (我们可以通过s1里面的地址找到地址所指向的学生对象) 学生对象内部会依据学生类的格式为实例变量开辟内存空间,这些空间用于存储这个对象自己的数据,且这些实例变量都会有默认值(null/0)。学生对象的内部同时存放着对应类的地址。

  ④ 执行main方法的第二、三行:通过s1中的地址找到对应的学生对象,然后把这个学生对象里面相关变量的值进行更新;

  ⑤ 指向main方法的第三、四行:通过s1中的地址找到对应的学生对象,然后通过学生对象中的存储的类的地址,找到对应的类,最后通过方法名定位到要调用的方法进行调用,且哪个对象调用的方法,方法中处理的数据就是哪个对象的数据(注意:方法并不占用存储空间)

09 什么是引用

答:引用类型的变量简称引用,里面存储着对象的地址。

10 this关键字

【1】含义:this引用是所有实例方法的一个隐藏参数,哪个对象调用这个实例方法,this引用就指向哪个对象。

【2】用处:解决变量名冲突问题:当实例方法的局部变量名和成员变量名(类变量和实例变量)相同时,在前面加this.的代表的是成员变量,前面没有this.的则为局部变量。

11 构造器(构造方法)

【1】语法格式:修饰符 类名 参数列表 {}

【2】注意事项:

    构造器的修饰符一般是public,如果使用private修饰则会使得该类无法实例化对象。

   ② 构造器是特殊的方法,它和普通方法相比它并没有返回类型,且方法名必须与所在类名一致。

   ③ 构造器可以发生重载。

    构造器什么时候被调用:关于new 构造器;的理解。其一:实例化某对象,其二:调用带有几个参数的构造器。即,构造器不需要我们自己调用,在实例化对象的时会根据我们传的参数调用对应的构造器。因此构造器的常见应用场景:完成对实例变量的初始化赋值(类变量也可以,不过类变量的初始化一般会写在静态代码块中),如此我们就可以不用再利用点号去一个个赋值啦。

   ⑤ 构造器并不负责给对象开辟内存空间。

    在创建类时如果不写构造器,Java会自动生成一个不带参数的构造器(通过反汇编可以看到)

   ⑦ 一旦定义了带参数的构造器,Java就不再提供不带参数的构造器,此时我们想使用不带参数的构造器就得自己手写了。

   ⑧ 在构造器的第一行可以通过this(...)调用其他的构造器,但是注意不能成环。

    构造方法在每一个对象的生命周期中只会调用一次。

12 封装

【1】介绍:封装是面向对象编程的三大特征之一。概念:用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。

【2】封装的设计规范:合理隐藏,合理暴露。我们在设计对象的成员时,将对象的成员变量都隐藏起来,并暴露合适的get 和 set 方法供外界访问(get和set方法里面我们可以通过逻辑控制语句对取值和赋值进行限制);在设计对象的成员方法时暴露必须暴露的就行了。

【3】代码层面控制公开和隐藏的关键字是:public 和 private。

【4】进一步解释:如果将一个成员变量完全暴露,那么使用者就可以任意修改该成员变量的值,  如果更改成一些不合理的值显然是不行,所以我们可以将成员变量使用private关键字封装起来,当使用者想要对被封装的成员变量进行重新赋值和获取时,我们可以设计合适的get和set方法提供用户使用(get和set方法里面我们可以通过逻辑控制语句,控制用户的赋值和取值,例如下图代码)。

13 实体类(JavaBean)

【1】形式:第一点:这个类中的成员变量必须定义成私有的,且要对外提供相应的get 和 set方法,第二点:这个类中必须有一个公共的无参数构造方法,其他的构造方法可写可不写。

【2】意义:实体类只负责数据的存储,而对于数据的处理交给其他类来完成,以实现对数据和数据业务相分离的效果 (这时现阶段软件开发里比较流开发模式)。

【3】使用示例:判断某学生的成绩是否及格:

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

15 案例:模仿电影信息系统


代码位置:模仿电影信息系统.txt

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Radware 报告 Web DDoS 攻击活动

新一代 HTTPS 洪水攻击的频率和强度急剧增加,攻击者引入的复杂程度也在迅速提高。2024 年上半年,Web 分布式拒绝服务 (DDoS) 攻击的频率和强度显著增加。其中很大一部分活动可以归因于受政治紧张局势驱使的黑客活动分子。 众所周知,当今的黑…

Ubuntu22.04系统安装opencv步骤简述及问题解决方法

前言 opencv是一个功能强大、开源且跨平台的计算机视觉库,适用于多种编程语言和操作系统,能够帮助开发者构建各种视觉项目。其模块众多,提供了诸多功能,能够进行图像处理、视频处理等等。比如:Highgui模块提供图像用户…

java开发中间件学习记录(持续更新中~)

1 Redis 2JVM 3 java基础底层 4Mysql 5 spring 6 微服务 7.......(持续更新) One:Redis篇 1:Redis 1.穿透 1.1缓存穿透 1.1.1布隆过滤器 1.2缓存击穿 2:击穿 1.3:缓存雪崩 1.4:双写一致 1.5.持久化(RDB,AOF) 1.6…

Mastering openFrameworks_第十一章_网络

网络 网络为多个设备之间的数据交换提供了一种方式。它是一个主要组成部分,允许远程控制移动和平板设备应用程序中的一些参数,也用于使交互式项目在多台计算机上同步工作。在本章中,您将学习如何在openFrameworks项目中实现和使用OSC和TCP协…

Go 1.19.4 路径和目录-Day 15

1. 路径介绍 存储设备保存着数据,但是得有一种方便的模式让用户可以定位资源位置,操作系统采用一种路径字符 串的表达方式,这是一棵倒置的层级目录树,从根开始。 相对路径:不是以根目录开始的路径,例如 a/b…

【Qt笔记】QScrollArea控件详解

目录 引言 一、QScrollArea 的基本概念 二、QScrollArea 的主要属性 2.1 设置内容大小是否随滚动区域变化 2.2 设置水平与垂直滚动条 2.3 设置视口外边距 三、QScrollArea 的常用方法 3.1 设置显示小部件 3.2 返回当前设置的小部件 3.3 设置内部小部件是否可以填充…

【bug】通过lora方式微调sdxl inpainting踩坑

报错内容 ValueError: Attempting to unscale FP16 gradients. 报错位置 if accelerator.sync_gradients:params_to_clip (itertools.chain(unet_lora_parameters, text_lora_parameters_one, text_lora_parameters_two)if args.train_text_encoderelse unet_lora_parameters…

ICP算法介绍,机器人姿态估计,三维点云配准

介绍 ICP算法,即Iterative Closest Point(迭代最近点)算法,是一种广泛应用于计算机视觉和图像处理领域的几何配准算法。它的主要目的是通过最小化两组点集之间的距离来找出一组变换,使得两组点集尽可能地对齐。ICP算法…

37拼购:电商新风尚,共享双赢的购物革命

随着2024年电商市场的日益繁荣,商品海洋中的同质化问题愈发严峻,消费者在茫茫商海中寻觅独特价值的难度陡增。在此背景下,一种名为“37悦享拼”的创新电商模式横空出世,它巧妙融合了私域社交与电商精髓,旨在打破传统壁…

9.18作业

提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格、其他字符的个数并输出 代码展示 #include <iostream>using namespace std;int main() {string str;int countc 0; // 字母计数int countn 0; // 数字计数int count 0; // 空格计数int counto 0;…

部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现

部署资源 AUTODL 使用最小3080Ti 资源&#xff0c;cuda > 12.0使用云服务器&#xff0c;部署fastGPT oneAPI&#xff0c;M3E 模型 操作步骤 配置代理 export HF_ENDPOINThttps://hf-mirror.com下载qwen2模型 - 如何下载huggingface huggingface-cli download Qwen/Qwen2-…

Java | Leetcode Java题解之第402题移掉K位数字

题目&#xff1a; 题解&#xff1a; class Solution {public String removeKdigits(String num, int k) {Deque<Character> deque new LinkedList<Character>();int length num.length();for (int i 0; i < length; i) {char digit num.charAt(i);while (!…

ERP进销存管理系统的业务全流程 Axure高保真原型源文件分享

这是一套ERP进销存管理系统的业务全流程Axure高保真原型设计文档。 原型预览地址&#xff1a;https://ppndif.axshare.com 产品意义&#xff1a; 提高工作效率&#xff1a; 电子记账替代手工记账&#xff0c;减少工作负担和人为错误。 实时查看库存情况&#xff0c;减少盘点时…

MySQL常用语句(一)

#数据库操作思路 #相关实验 <SQL语句简介> <web安全SQL语句基本操作> #数据库管理 #创建数据库 在与数据进行任何操作之前&#xff0c;需要创建一个数据库。数据库是数据的容器&#xff0c;用于存储和操作诸如表、数据库视图、触发器、存储过程等数据的数据集…

项目管理 | 一文读懂什么是敏捷开发管理

在快速变化的商业环境中&#xff0c;项目管理方式也在不断演进&#xff0c;其中敏捷开发管理因其高效、灵活和适应性强的特点&#xff0c;逐渐成为众多企业和团队的首选。本文将详细解析敏捷开发管理的定义、具体内容及其核心角色&#xff0c;帮助读者全面理解这一先进的项目管…

Alinx MPSoC驱动开发第17章I2C实验修改设备树后petalinux编译报错

问题描述 在使用Alinx的MPSoC Linux驱动开发手册第17章进行I2C驱动学习时&#xff0c;在按照手册&#xff0c;在system-user.dtsi文件最后添加引用i2c1节点内容&#xff1a; 然后使用petalinux-build命令进行编译&#xff0c;后报错如下&#xff1a; 尝试解决问题 1&#xff0c…

vscode软件在 C发中常用插件

一. 简介 本文简单介绍一下&#xff0c;当做 C开发时 vscode软件常用的插件。 vscode软件是 微软公司目前提供的一款免费的开发软件&#xff0c;可以通过 vscode官网下载 vscode。 二. vscode软件在 C开发中常用插件 注意&#xff1a;vscode软件安装后&#xff0c;可以直接…

FlinkCDC 3.2.0 新增优点 Pattern Replacement in routing rules

新增优点&#xff1a;Pattern Replacement in routing rules flinkcdc 3.2.0版本相较于3.1.0版本&#xff0c;避免了多表多sink多次写 route 路由的麻烦&#xff0c;类似于统一前后缀的形式多表多sink&#xff0c;通过<>正则&#xff0c;大大减少了书写 官网&#xff1…

鸿蒙开发之ArkUI 界面篇 九 QQ音乐登录界面揭秘

我们需要实现的效果如下图&#xff1a; : 分析&#xff0c;垂直方向&#xff0c;四个按钮&#xff0c;从上往下第一个是Image&#xff0c;第二个是Text、第三个是是Button、第四个是Button&#xff0c;垂直布局用Column&#xff0c;代码实现如下&#xff1a; Entry Component…

【C语言进阶】动态内存与柔性数组:C语言开发者必须知道的陷阱与技巧

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言动态内存管理 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言动态内存管理 &…