JavaSE - 面向对象编程01

news2025/2/23 6:22:05

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.coloradmin.cn/o/2146475.html

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

相关文章

PyCharm用法

一、汉化 要将‌PyCharm设置为中文,可以通过以下两种方法:‌ 通过内置插件市场安装中文语言包 1.打开PyCharm,点击File -> Settings(在Mac上是PyCharm -> Preferences)。 2.在设置界面中选择Plugins&#x…

[Linux]进程控制详解

1.创建进程 进程调用fork,当控制转移到内核中的fork代码后,内核做: ● 分配新的内存块和内核数据结构给子进程 ● 将父进程部分数据结构内容拷贝至子进程 ● 添加子进程到系统进程列表当中 ● fork返回,开始调度器调度 这个前面提到过&#…

智能玩具用离线语音识别芯片有什么优势

随着科技的发展,很多智能电子产品和儿童玩具实现了与人类的交互,语音芯片在这些人机交互中起到了不可替代的作用,语音识别芯片在智能玩具中的应用就为其带来了更多的优势。‌ 离线语音识别,即小词汇量、低成本的语音识别系统&…

esp32 wifi 联网后,用http 发送hello 用pc 浏览器查看网页

参考chatgpt Esp32可以配置为http服务器,可以socket编程。为了免除编写针对各种操作系统的app。完全可以用浏览器仿问esp32服务器,获取esp32的各种数据,甚至esp的音频,视频。也可以利用浏览器对esp进行各种操作。但esp不能主动仿…

【深度学习】(2)--PyTorch框架认识

文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…

【STL】vector 基础,应用与操作

vector 是 C 标准库中最常用的顺序容器之一,提供了动态数组的功能。与普通数组相比,vector 能够根据需求自动扩展或收缩,为程序员提供了更灵活的数据存储方案。本文将详细介绍 vector 的相关操作,并结合实例代码帮助读者深入理解。…

MindShare PCIE 3.0 笔记-第一二章

MindShare 官网,地址如下: MindShare Chapter 1:PCIE 背景介绍 - PCI 总线模型 1. 以 PCI 总线作为外设总线的 SOC 芯片架构 下图展示了一个以 PCI 总线作为外设总线的 SOC 芯片架构(PCI 总线类似 AXI 下的 AHB?): 由上图可知…

Django Auth组件

文章目录 前言一、使用场景二、使用步骤1.验证用户( authenticate() 方法)2.注册用户3.退出登陆4.装饰器 前言 Django 的用户认证组件基于以下几个核心概念: 1.用户认证:处理用户的登录、注销和密码管理,提供了一个User模型和相关的视图、表…

技术美术一百问(02)

问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些? 答案 1.前向渲染和延迟渲染的流程 【例图…

图神经网络池化方法

图神经网络池化方法 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 图神经网络池化方法前言一、扁平图池化二、分层图池化1.节点聚类池化2.节点丢弃池化 参考文献 前言 图池化操作根据其池化策略的差异&#xff…

软考(中级-软件设计师)(0919)

软考 一、软件设计师-历年考试考点分布情况-上午-计算机与软件工程知识 知识点分数说明比例软件工程基础知识11开发模型、设计原则、测试方法、质量特性、CMM、Pert图、风险管理14.67%面向对象12面向对象基本概念、面向对象分析与设计、UML、常见算法16.00%数据结构与算法10…

代码随想录算法day37 | 动态规划算法part10 |

今天开始正式子序列系列!!!!! 300.最长递增子序列 本题是比较简单的,感受感受一下子序列题目的思路。 力扣题目链接(opens new window) 给你一个整数数组 nums ,找到其中最长严格递增子序列的长…

读mamba有感,自然而然产生的问题及答案。

原文链接:https://arxiv.org/abs/2312.00752 Q:为什么说Mamba可以比肩甚至超越transformer?各自有什么优劣? A:Transformer在处理长序列时,存在着计算效率低下的问题,无法对有限窗口之外的任何…

查询中的行选择

用WHERE子句限制从查询返回的行。一个WHERE子句包含一个必须满足的条件,WHERE子句紧跟着FROM子句。如果条件是true,返回满足条件的行。 在语法中: WHERE 限制查询满足条件的行 condition 由列名、表达式、常数和比较操作组成…

bootstrap application nacos环境配置失效

tmd 环境配置 是yaml ,yml 后缀配置不生效 (不,看你取得文件名是什么) 如果 file-extension 配置的是yaml 就读取不到 yml 中的配置 2 . 如果还不行,、nacos 配置只能卸载bootstrap.yml 中,application.yml 不生效 bootstrap.yml…

c/c++语言中extern的用法(VS编译)

c/c语言中extern的用法 前言:1. 声明外部变量2. 声明外部函数3. 在头文件中使用注意事项 效果展示: 前言: extern 关键字不仅在 C 语言中使用,在 C 语言中也同样适用。它主要用于声明一个变量或者函数是在别的文件或翻译单元中定…

怎么操作使http变成https访问?

获取SSL证书 选择证书颁发机构:可以选择受信任的免费或付费证书颁发机构(CA)如JoySSL 申请和验证域名:注册并填写注册码230920,验证域名所有权。下载SSL证书文件到本地电脑. JoySSL品牌证书 注册享大额优惠JoySSL是网…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…

车市状态喜人,国内海外“两开花”

文/王俣祺 导语:随着中秋假期告一段落,“金九”也正式过半,整体上这个销售旺季的数据可以说十分喜人,各家车企不是发布新车、改款车就是推出了一系列购车权益,充分刺激了消费者的购车热情。再加上政府政策的鼎力支持&a…

Unity 使用Editor工具查找 Prefab 中的指定脚本

在 Unity 项目中,随着项目规模的扩大和 Prefab 数量的增加,管理和定位 Prefab 中的脚本变得更加复杂。为了提高开发效率,所以需要编写一个自定义的 Unity Editor 工具,帮助查找某个 Prefab 中是否使用了指定的脚本。本文将介绍如何…