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

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

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

相关文章

不可错过的AIGC浪潮:提升效率与竞争力的必备神器

随着人工智能生成内容(AIGC)技术的迅猛发展,它在提升工作效率和改善生活质量方面展示了巨大的潜力。对职场人来说,了解AIGC如何改变各个行业,并探讨其未来发展中的风险和机遇,将有助于他们更好地利用这项技…

三相可控整流电路 (三相半波,三相桥式)

目录 1. 三相半波整流电路 2. 三相桥式全控整流电路 三相可控整流电路利用三相交流电源,通过可控硅(晶闸管)将交流电整流为直流电。主要有两种常见类型:三相半波整流电路和三相桥式全控整流电路。 1. 三相半波整流电路 三相半波…

Java数据存储结构——二叉查找树

文章目录 22.1.2二叉查找树22.1.2.1 概述22.1.2.1二叉查找树添加节点22.1.2.2二叉查找树查找节点22.1.2.3 二叉树遍历22.1.2.4 二叉查找树的弊端 22.1.2二叉查找树 22.1.2.1 概述 二叉查找树,又称二叉排序树或者二叉搜索树 二叉查找树的特点: 每一个节点上最多有…

你的绩效是不是常年都是B

原创不易,求赞,求关注,🙏🙏🙏🙏🙏🙏🙏🙏 目录 原创不易,求赞,求关注,🙏🙏&#x1f64…

PCL 点云生成DSM图 (高程模型图)

🙋 结果预览 🔗接上篇 Python 点云生成高程模型图(DSM) 一、代码实现 #include <pcl/io/pcd_io.h> //PCD读写类相关的头文件 #include

使用java程序对字符串进行加密

程序功能 程序的功能是对用户输入的字符串&#xff0c;使用常见的三种加密算法&#xff08;MD5、SHA-1 和 SHA-256&#xff09;进行加密&#xff0c;并输出每种算法加密后的结果。 主要步骤包括&#xff1a; 用户通过控制台输入一个字符串。 程序使用 MessageDigest 类&#x…

DFS:深搜+回溯+剪枝实战解决OJ问题

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 排列、子集问题 1.1 全排列I 1.2 子集I 1.3 找出所有子集的异或总和 1.4 全排列II 1.5 字母大小写全排列 1.6 优美的排列 二 组合问题 2.1 电话号码的数字组合 …

三菱模拟量入门接线与编程详解

当我们学会完基础后。下面就需要学习模拟量,希望小编的文章对读者有所帮助! 什么是模拟量? 模拟量是指一些连续变化的物理量(简单来说就是连续变化的量),在PLC中通常电压信号为0~10V,电流信号为4~20mA。 为什么要使用模拟量? 当我们需要检测如电压、电流、压力、速度、…

【计网】从零开始使用TCP进行socket编程 --- 客户端与服务端的通信实现

阵雨后放晴的天空中&#xff0c; 出现的彩虹很快便会消失。 而人心中的彩虹却永不会消失。 --- 太宰治 《斜阳》--- 从零开始使用TCP进行socket编程 1 TCP与UDP2 TCP服务器类2.1 TCP基础知识2.2 整体框架设计2.3 初始化接口2.4 循环接收接口与服务接口 3 服务端与客户端测试…

JS落叶动画代码分析

秋天到了&#xff0c;秋高气爽的季节。我们来做一个落叶动画吧&#xff01;来迎接秋天的到来 文字可以更换。 1.目录如下 在线演示&#xff1a;点击我在线演示 images两张照片&#xff0c;首先&#xff0c;你得要准备一个vscode编辑器。和一个chorme浏览器或edge浏览器。 …

PyTorch 激活函数及非线性变换详解

激活函数是深度学习模型的重要组成部分&#xff0c;它们引入非线性&#xff0c;从而使模型能够更好地拟合复杂的数据模式。本文将详细介绍激活函数的作用、常见类型、经典应用示例&#xff0c;并比较它们的优缺点。 激活函数的作用 激活函数的主要作用是引入非线性变换&#…

理解高并发

文章目录 1、如何理解高并发2、高并发的关键指标3、高并发系统设计的目标是什么&#xff1f;1_宏观目标2_微观目标1.性能指标2.可用性指标3.可扩展性指标 4、高并发的实践方案有哪些&#xff1f;1_通用的设计方法1.纵向扩展&#xff08;scale-up&#xff09;2.横向扩展&#xf…

ROS组合导航笔记2:使用外部定位系统

在上一单元中&#xff0c;我们了解了如何合并不同传感器的数据以生成机器人的姿势估计。因此&#xff0c;基本上&#xff0c;我们介绍了图表的以下部分&#xff0c;其中向 robot_localization 节点提供了不同的传感器&#xff0c;以便通过卡尔曼滤波器进行合并。 但是...图表的…

背包问题 总结详解

就是感觉之前 dp 的 blog 太乱了整理一下。 0-1 背包 例题:P1048 朴素算法 思路 对于一个物品&#xff0c;我们可以选&#xff0c;也可以不选。 我们用表示第 i 件物品的重量&#xff0c;表示第 i 件物品的价值。 考虑表示前 i 件物品放入容量为j的背包中的最大价值。 如…

【图像匹配】基于Harris算法的图像匹配,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于Harris算法的图像匹配&#xff0c;用matlab实现。 一、案例背景和算法介绍 …

Observability:日志管理的最佳实践 - 利用日志更快地解决问题

作者&#xff1a;来自 Elastic Luca Wintergerst•David Hope•Bahubali Shetti 在当今快速发展的软件开发环境中&#xff0c;高效的日志管理对于维护系统可靠性和性能至关重要。随着基础架构和应用程序组件的不断扩展和复杂化&#xff0c;运营和开发团队的职责也不断增加且越来…

yolov8区域入侵检测警报系统-pyside6可视化界面

yolov8区域入侵检测警报系统&#xff0c;是微智启软件工作室基于yolov8目标追踪和pyside6开发&#xff0c;在window的pycharm或者vscode里运行&#xff0c;可以应用于多个领域&#xff0c;检测统计物体个数以及入侵语音警报。 功能介绍 可以应用于 江河流域危险区域禁止游泳警…

利用AI技术提升ISP处理:图像质量的四大关键模块

随着智能手机和数码相机的飞速发展&#xff0c;图像质量成为了影响用户体验的关键因素之一。图像信号处理&#xff08;ISP&#xff0c;Image Signal Processing&#xff09;管道是将图像传感器捕捉到的原始数据转化为高质量输出的核心技术。然而&#xff0c;传统的ISP处理方法在…

螺丝、螺母、垫片等紧固件常用类型详细介绍

螺钉、螺母、垫片等紧固件介绍 螺钉 杯头内六角 首先介绍一下杯头内六角&#xff0c;杯头内六角是我们用的最常见的一种螺钉&#xff0c;如果你对选择螺钉没有什么想法&#xff0c;可以直接无脑选杯头内六角去使用。 比如说我们有一个零件加工了通孔&#xff0c;另一个零件加…

vmware,centos8(虚拟机) 的安装

安装vmware 点击下方网址 虚拟机安装地址https://www1.msc23.cn/vm/?bd_vid8829610582362807097选择VMware17 打开文件所在地&#xff0c;双击安装 同意条款 选择安装位置 不将VMware配置到环境变量path 不检查更新,不加入客户体验 创建桌面快捷方式 开始安装 安装完成…