6.1面向对象的介绍和内存

news2024/11/16 7:24:17

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

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("正在看直播~");
    }
}

在这里插入图片描述

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

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

相关文章

LC-1494. 并行课程 II(状压DP)

1494. 并行课程 II 难度困难116 给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 relations 中, relations[i] [xi, yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。 在…

SSR渲染--01--初识Nuxt

SSR服务端渲染 SSR服务端渲染:在后端将html页面处理好,前端直接展示(可以解决为后端给你传了一个html脚本,全段渲染) 为什么要有SSR服务端渲染? 可以解决单页面首屏加载慢的问题,同时有利于用…

JUC之可见性和有序性

目录 java内存模型 可见性 现象出现 现象解释 解决方法 有序性 诡异的结果 解决方法 Happens-before规则 java内存模型 Java内存模型(Java Memory Model,简称JMM)定义了Java程序中各种变量、对象的访问方式和内存关系。JMM规定了线…

小程序-uniapp:uni-app-base 项目基础配置及使用,开箱可用

目前(20230605)uni-app最新版本(3.8.4.20230531) 一、官网文档 uni-app官网 二、创建项目 项目目标:vue3tsvitevscode 创建以 typescript 开发的工程(如命令行创建失败,请直接访问 gitee 下…

consul入门案例及配置热更新的实现及Feign的使用

Consul的简单入门 当Producer启动时,会向Consul发送一个post请求,告诉Consul自己的ip和Port;Consul接收到producer的注册后,每个10S(默认),会向producer发送一个健康检查的请求,检验Producer是否健康当Consumer发送GET方式请求/api/address到Producer时,会先从Consul中拿到一个…

Linux常用命令——gdb命令

在线Linux命令查询工具 gdb 功能强大的程序调试器 补充说明 gdb命令包含在GNU的gcc开发套件中,是功能强大的程序调试器。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 语法 gdb(选…

DeepFace:人脸识别库 DeepFace 简单认知

写在前面 工作中遇到,简单整理博文内容为 deepface 的简单介绍理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是…

HarmonyOS学习路之开发篇—Java UI框架(使用工具自动生成JS FA调用PA代码)

JS FA(Feature Ability)调用PA (Particle Ability)是使用基于JS扩展的类Web开发范式的方舟开发框架所提供的一种跨语言能力调用的机制,用于建立JS能力与Java能力之间传递方法调用、处理数据返回以及订阅事件上报的通道…

代码审计——目录遍历详解

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 目录遍历,即利用路径回溯符“../”跳出程序本身的限制目录实现下载任意文件。 例如Web应用源码目录、Web应用配置…

FastDeploy部署参考

一、FastDeploy的gitee地址 https://gitee.com/leiqing1/FastDeploy/blob/release/0.3.0/docs/cn/faq/use_sdk_on_windows.md#21-%E4%B8%8B%E8%BD%BD%E9%A2%84%E7%BC%96%E8%AF%91%E5%BA%93%E6%88%96%E8%80%85%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E6%9C%80%E6%96%B0%…

When viruses are good for you 病毒,有时对人体是有益的 | 经济学人20230506版社论双语精翻

本篇来自《经济学人》(The Economist)2023年5月6日社论(Leaders)精选:《病毒,有时对人体是有益的》(When viruses are good for you)。 Bacteriophages 噬菌体 When viruses are goo…

onlyoffice变量提取,处理各种办公文档

onlyoffice变量提取,处理各种办公文档 使用 ONLYOFFICE Docs 在 HumHub 中处理各种办公文档。 带有 HumHub 连接器的 ONLYOFFICE Docs 企业版允许您在灵活的开源社交网络工具包 HumHub 中实时协作查看和编辑办公文档(Word、Excel 或 PowerPoint)。它包括 ONLYOFFICE Docs&#…

代码审计——SQL注入详解

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 漏洞描述02 审计要点03 漏洞特征04 漏洞案例05 修复方案 01 漏洞描述 当应用程序将用户输入的内容,拼接到SQL语句中,一起提交给数据库执行时,就会产生SQL注入威…

代码随想录训练营Day60|84. 柱状图中最大的矩形

84. 柱状图中最大的矩形 class Solution {public int largestRectangleArea(int[] heights) {int res0;// 数组扩容,在头和尾各加入一个元素int [] newHeights new int[heights.length 2];newHeights[0] 0;newHeights[newHeights.length - 1] 0;for (int index…

Docker desktop 怎么切换docker源

点击setting,点击docker Engine 进行编辑 {"registry-mirrors":["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://4jup2u41.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn&q…

校园预付费管理系统与水电计量设备仪表的实际应用 安科瑞 许敏

摘要:论文设计了适用于学生公寓的自助式预付费控电控水管理系统,采用多种智能功能,可以监测和显示漏电现象,通过短路、跳线、零线接地等方式防范和记录用户的偷电行为,通过报警和拉闸防止事故的发生。该系统采用先进的…

霍夫变换原理

文章目录 霍夫变换原理当点都在y轴上时,用ykxb形式是无法求出参数空间中的交点,也就是累计都一样。所以就用极坐标来表示参数空间。公式求证过程 霍夫变换原理 当点都在y轴上时,用ykxb形式是无法求出参数空间中的交点,也就是累计都…

linux服务器安装nodejs

注意: 本文针对的是有linux操作基础, 会使用vim的基本操作的同学。故有些很基础的东西没有赘述,如果是纯小白的同学,看起来可能会感觉缺失一些东西。 1.nodejs官网下载自己需要的版本的node node版本选择下载地址 我使用的是14.…

图像边缘检测原理

文章目录 图像边缘检测原理1:2:3:基本边缘检测算子 图像边缘检测原理 1: 图像的边缘指的是图像中像素灰度值突然发生变化的区域,如果将图像的每一行像素和每一列像素都描述成一个关于灰度值的函数,那么图像的边缘对应在灰度值函数中是函数值突然变大的…

Autoware 安装(踩坑指南)

Autoware 安装(踩坑指南) 【Autoware】2小时安装Autoware1.13(保姆级教程) Autoware入门学习(二)——Ubuntu18.04下的源码安装和配置 上面的两篇博客安装都异常顺利,甚至没有一点报错&#xff0…