面向对象的介绍和内存

news2024/11/16 11:01:34

学习面向对象内容的三条主线

Java 类及类的成员:(重点)属性、方法、构造器;(熟悉)代码块、内部类
面向对象的特征:封装、继承、多态、(抽象)
其他关键字的使用:this、super、package、import、static、final、interface、
abstract 等

1. 面向对象编程概述(了解)

在学习面向对象之前,我们可以先了解一下面向过程。
面向过程是一种编程思想,它强调的是过程,意思是我们做任何事,都需要亲力亲为。
面向对象也是一种编程思想,相对于面向过程,我们的身份可以由原来问题的执行者变为指挥者,进而把生活中很多复杂的问题变得简单化。

面向过程强调的是过程,比如,把大象装冰箱,一共分3步:
第1步:打开冰箱门
第2步:把大象放进去
第3步:关上冰箱门

而面向对象强调的是结果,比如:
谁负责把大象装进去?
有没有发现,如果是面向对象的话,干这件事的主体并不是你自己,你变成了一个指挥者?

再比如,衣服脏了,我们可以让女盆友帮忙洗,不需要关注中间过程是怎么洗的,就可以拿到干净的衣服,当然,这首先需要有一个对象(加油哦)~

还有,当我们想吃一道菜,其实并不需考虑这道菜是怎么做的,怎么送达的,只需点菜即可.传菜和做菜都有具体的对象来完成具体的功能.我们不需要关注实现的过程,只需要关注结果就好。

在这里插入图片描述

这就是我们所说的面向对象的编程思想(OOP,Object Oriented Programming)

2 面向对象的三大特征

封装: 把相关的数据封装成一个“类”组件
继承: 是子类自动共享父类属性和方法,这是类之间的一种关系
多态: 增强软件的灵活性和重用性

Java语言最基本单位就是类,相当于类型。
类是一类事物抽取共同属性与功能形成的。
可以理解为模板或者设计图纸。

请添加图片描述

3.2 对象

每个对象具有三个特点:对象的属性,对象的功能和对象的标识。

对象的属性用来描述对象的基本特征。
对象的功能用来描述对象的可以完成的操作。
对象的标识是指每个对象在内存中都有一个唯一的地址值用于与其他对象进行区分,类似于我们的身份证号。

3.3 类和对象的关系

我们先创建类,再通过类创建出对象
我们可以通过一个类创建出多个对象
类是抽象的,对象是具体的

3.4 练习:类的创建使用

手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐

package cn.tedu.oop;
/**本类用作面向对象入门案例
 * 设计手机这一类事物:
 * 分析属性:品牌 价格 尺寸 颜色
 * 分析功能:打电话 发短信 看直播*/
/**在一个java文件中可以写多个class,但是,被public修饰的class只能有一个
 * 而且要求这个公共类的名字必须与文件的名字保持一致*/
public class TestCreateClass {
    public static void main(String[] args) {
        //help-findAction 或者 Alt+7
        //4.创建手机类的对象p1
        Phone p1 = new Phone();
        //5.通过手机类对象调用手机类的功能
        p1.call();
        p1.message();
        p1.video();
        //6.通过手机类对象打印查看属性值
        System.out.println(p1.color);//null
        System.out.println(p1.price);//0.0
        System.out.println(p1.size);//0.0
        System.out.println(p1.brand);//null
    }
}

//1.通过class关键字创建手机类--用来描述手机这一类事物--属性+功能
class Phone{
    //2.定义手机类的属性--用成员变量来描述--位置:类里方法外
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色
    //3.定义手机类的功能--用方法来描述--格式:修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信!");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

3.5 对象在内存中的存储
Java把内存分成5大区域,我们重点关注栈和堆。

一般来讲局部变量存在栈中,方法执行完毕内存就被释放
对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
每个堆内存的元素都有地址值
对象中的属性都是成员变量,是有默认值的
TIPS: 栈与队列指的是一种数据的结构。
栈:先进后出(FILO – First In Last Out)
队列:先进先出(FIFO – First In First Out)

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

对象的创建过程分析:

Phone p = new Phone(); 这句代码,再内存中会发生什么呢?
1.在栈内存中开辟一块空间,存放引用类型Phone类型的变量p
2.在堆内存中开辟一块空间,存放Phone类型的对象
3.要给这个对象进行初始化,比如:String brand = null;
4.当对象准备好以后,会生成一个唯一的地址值,然后将此地址值交给引用类型的变量p来保存
5.如果以后想要操作此对象的各种资源,可以通过p变量保存的地址值找到该对象,比如:p.call(); p.price = 66.6;

在这里插入图片描述
3.6 练习2:创建多个对象

package cn.tedu.oop;
/**本类用作面向对象入门案例
 * 设计手机这一类事物:
 * 分析属性:品牌 价格 尺寸 颜色
 * 分析功能:打电话 发短信 看直播*/
/**在一个java文件中可以写多个class`,但是,被public修饰的class只能有一个
 * 而且要求这个公共类的名字必须与文件的名字保持一致*/
public class TestCreateClass {
    public static void main(String[] args) {
        //help-findAction 或者 Alt+7
        //4.创建手机类的对象p1
        Phone p1 = new Phone();
        //5.通过手机类对象调用手机类的功能
        p1.call();
        p1.message();
        p1.video();
        //6.通过手机类对象打印查看属性值
        System.out.println(p1.color);//null
        System.out.println(p1.price);//0.0
        System.out.println(p1.size);//0.0
        System.out.println(p1.brand);//null

        //7.创建手机类的第2个对象p2
        Phone p2 = new Phone();
        //8.通过p2对象,调用Phone类的3个方法
        p2.call();
        p2.message();
        p2.video();
        //9.给p2对象的4个属性赋值
        p2.brand = "HUAWEI";
        p2.color = "中国红";
        p2.price = 6666.66;
        p2.size = 5.6;
        //10.打印查看p2对象的4个属性值
        System.out.println(p2.brand);
        System.out.println(p2.price);
        System.out.println(p2.color);
        System.out.println(p2.size);

        //11.查看两个对象的地址值
        System.out.println(p1);//cn.tedu.oop.Phone@1b6d3586
		System.out.println(p2);//cn.tedu.oop.Phone@4554617c
    }
}

//1.通过class关键字创建手机类--用来描述手机这一类事物--属性+功能
class Phone{
    //2.定义手机类的属性--用成员变量来描述--位置:类里方法外
    String brand;//品牌
    double price;//价格
    double size;//尺寸
    String color;//颜色
    //3.定义手机类的功能--用方法来描述--格式:修饰符 返回值类型 方法名(参数列表){方法体}
    public void call(){
        System.out.println("正在打电话~");
    }
    public void message(){
        System.out.println("正在发短信!");
    }
    public void video(){
        System.out.println("正在看直播~");
    }
}

在这里插入图片描述
jian

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

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

相关文章

3 个技巧,让你像技术专家一样解决编码问题

「我应该如何提高解决问题的能力?尽管我掌握了 JavaScript,却无法解决实际问题或理解复杂的 JavaScript 代码。」 经常有年轻的开发者朋友问我类似的问题。对开发者来说,解决问题非常重要。编写优秀的代码是一门创造性的艺术,而要…

Linux第二章之基本指令

目录 第一章、基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要) 06.rmdir指令 && rm 指令(重要) 07.man指令(重要) 08.cp指令(重要&#xff0…

【性能测试系列】JMeter核心技术:分布式压测和参数化

JMeter分布式压测 为什么要做分布式部署? 在上一篇文章中,我们提到了JMeter的线程启动和运行,是会占用系统资源的,一旦需要大并发,而JMeter单机部署配置不够,将会导致JMeter无法在规定时间内启动对应的线程数&#x…

OpenCV项目开发实战--对图像进行非真实感渲染-附Python、C++的代码实现

编写一个过滤器来创建如上所示的风格化/卡通化图像,OpenCV 3 中边缘保留过滤的非常快速的实现。结果与双边过滤非常相似,但速度更快。 用于边缘感知过滤的域变换 它是Eduardo Gastal 和 Manuel Oliveira 在SIGGRAPH 2011 上题为“边缘感知图像和视频处理的域变换”的论文的部…

MM ME21n/Me22n 采购订单创建保存后增强点

有2处可以增强 我们可以在 013 这里 做这个增强 debug可以看到参数 传递到外部系统中 另外一处是

【VMware】VMware17安装实践记录

目录 1、下载地址 2、安装 2.1 更改一下安装路径 3、激活 前言:本博文记录博主自己安装的过程,便于后续自己学习使用 1、下载地址 联系博主 2、安装 2.1 更改一下安装路径 移除更新和加入计划 3、激活 可使用30天版本

ABeam中国2023社招 | ABeam旗下艾宾信息技术开发(上海)热招职位

招聘岗位 SAP SD Consultant (English Speaker) 职位要求 ■ 3年以上SD项目实施或支持经验 ■ 有效的沟通技巧,快速的反应和积极的态度 ■ 能够在压力下工作或面对挑战 ■ 具备ABAP调试和编程能力 ■ 有MM交叉模块知识优先 ■ 良好的英语能力 SAP EWM/MM Co…

易基因:NAR:ChIP-seq等揭示蛋白质酰基化与c-di-GMP协同调控放线菌发育与抗生素合成机制|项目文章

易基因细菌ChIP-seq测序分析结果见刊《Nucleic Acids Research》 大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 2023年06月07日,华东理工大学生物工程学院和生物反应器工程国家重点实验室叶邦策教授和尤迪副教授为共同通…

Redis命令-List、Set和SortedSet类型

1. List类型 与Java中LinkedList类似,可以看做是一个双向链表结构,既支持正向检索也可以支持反向检索。 关于BLPOP和BRPOP,需要设置阻塞时间 此时在另一个客户端中,在user2中添加一个元素 则在第一个客户端中,阻塞解除…

【图神经网络】用PyG实现图机器学习的可解释性

Graph Machine Learning Explainability with PyG 框架总览示例:解释器The Explanation ClassThe Explainer Class and Explanation SettingsExplanation评估基准数据集Explainability Visualisation实现自己的ExplainerAlgorithm对于异质图的扩展解释链路预测 总结…

如何在Windows 10中创建提升的命令提示符快捷方式

命令提示符是在“命令提示符”窗口中键入计算机命令的入口点。通过在提升的命令提示符中键入命令,你可以在不使用 Windows 图形界面的情况下在计算机上执行需要管理员权限的任务。 一、右键单击或按住桌面上的空白区域,然后单击“新建”和“快捷方式”。 二、将下面的任一…

如何使用Postman生成curl?

生成在Lunix系统调接口的curl 直接看图操作 点击</>即可&#xff01;

Kali Linux 简介

概要 Kali Linux 是安全专家和以及网络安全爱好者所使用的工具&#xff0c;你不应该也不允许使用它来对他人的计算机系统进行未经允许的任何活动。任何使用它带来的法律后果和损失&#xff0c;将由使用者自行承担。我们之所以推荐 Kali Linux&#xff0c;是希望有更多的人来保护…

Spring架构篇--2.7.6 远程通信基础--Netty流程总结

前言&#xff1a;虽然netty 内部的流程比较复杂&#xff0c;但是对于用户来说还是非常友好的&#xff0c;我们只需要进行必要的参数设置&#xff0c;以及添加处理业务的handler 即可&#xff1b;本文对netty 进行阶段性的回顾。 1 首先看下netty 整体的一个工作流程图&#xf…

el-form表单全部/部分添加一样字段内容并表单校验(复制即可实现)

需求&#xff1a;表单有俩个按钮&#xff0c;一个是全部添加&#xff0c;一个是部分添加默认如下&#xff1a; 点击添加饮品爱好后如下&#xff0c;可以添加多个 点击添加全部&#xff0c;并且点击提交按钮后的表单校验,如下图&#xff1a; 全部代码如下&#xff0c;可自行复制…

Linux 6.3更新补丁修复XFS元数据损坏的问题

导读一些 XFS 用户曾反馈&#xff0c;在升级到最新的 Linux 6.3.3 point releases 之后&#xff0c;出现了元数据损坏的问题。 一些 XFS 用户曾反馈&#xff0c;在升级到最新的 Linux 6.3.3 point releases 之后&#xff0c;出现了元数据损坏的问题。对此&#xff0c;内核开发…

Electron 进程间通信的实现

electron Electron 进程间通信的实现 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/131136140 【介绍】…

【LeetCode】HOT 100(9)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

一款开源、免费的微信管家系统,助你快速搭建微信应用

JeewxBoot是一款免费的JAVA微信管家平台&#xff0c;支持微信公众号、小程序、微信第三方平台、抽奖活动等。JeewxBoot已经实现了系统权限管理、公众号管理、抽奖活动等基础功能&#xff0c;便于二次开发&#xff0c;可以快速搭建微信应用&#xff01; 技术架构&#xff1a;Sp…