当前位置: 首页 > news >正文

【我与java的成长记】之面向对象的初步认识

在这里插入图片描述

系列文章目录

能看懂文字就能明白系列
C语言笔记传送门
🌟 个人主页:古德猫宁-

🌈 信念如阳光,照亮前行的每一步


文章目录

  • 系列文章目录
    • 🌈 *信念如阳光,照亮前行的每一步*
  • 前言
  • 一、什么是面向对象
    • 面向过程与面向对象
    • 什么是面向过程
    • 什么是面向对象
  • 二、类的定义和使用
    • 简单认识类
    • 类的定义格式
  • 三、类的实例化
    • 什么是实例化
    • 类和对象的说明


前言

本节目标:

  1. 了解什么是面向对象,与面向过程的区别
  2. 掌握类的定义方式以及对象的实例化
  3. 掌握类中的成员变量和成员方法的使用

一、什么是面向对象

面向过程与面向对象

大家都知道Java是一种面向对象的开发语言,那么什么是面向对象呢?

所谓面向对象,其实是指软件工程中的一类编程风格,面向对象是众多编程风格中的一种。除了面向对象,还有面向过程,指令式编程和函数式编程等。

什么是面向过程

面向过程(Procedure Oriented)是一种以过程为中心的编程思想,是一种自顶而下的编程模式。比如经典的C语言就属于这种面向过程的语言
在这种编程模式中,程序员需要把问题分解成一个个步骤,每个步骤用函数实现,依次调用即可。
基于面向过程进行的软件开发,其代码都是流程化的,可以明确地看出第一步做什么,第二步做什么(讲究的是一种过程)。这种方式的代码执行起来效率很高。
但是,面向过程同时存在代码重复性低,扩展能力差,后期维护难度较大等问题。

如下图:
在这里插入图片描述
这种方式注重的是洗衣服的过程,少了一个环节可能都不行,而且不同衣服洗的方式,时间长度,拧干方式都不同,处理起来就比较麻烦。如果将来要洗鞋子,那就是另一种方式。

什么是面向对象

面向对象(Object Oriented)的雏形最早出现在1960年的Simula语言中。当时的程序设计领域正面临一种危机:在软硬件逐渐复杂的情况下,软件如何得到良好的维护?
面向对象程序设计在某种程度上通过强调可重复性解决了这一问题。
目前,较为流行的面向对象语言主要与Java,C#,C++,Python,Ruby和PHP
简单来说,在面向对象的开发模式中,程序员将问题分解为一个个步骤,对每个步骤进行相应的抽象,形成对象,通过不同对象之间的调用,组合解决问题。
在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。

如下图:
在这里插入图片描述
总共有四个对象:人,衣服,洗衣粉,洗衣机
整个洗衣服的过程:人将衣服放进洗衣机,倒入洗衣粉,启动洗衣机,洗衣机就会完成洗衣过程并且甩干
整个过程主要是:人,衣服,洗衣粉,洗衣机四个对象之间交互完成的,人不需要关心洗衣机具体是如何洗衣服的,是如何甩干的

二、类的定义和使用

面向对象程序设计关注的是对象,而对象是现实中的实体,比如:洗衣机。但是洗衣机计算机并不认识,需要开发人员告诉计算机什么是洗衣机。
在这里插入图片描述
上图左侧就是对洗衣机简单的描述,该过程称为洗衣机对象(实体)进行抽象(对一个复杂事物的重新认识),但是这些简化的抽象结果计算机也不能识别,开发人员可以采用某种面向对象的编程语言来进行描述。

简单认识类

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干啥),描述完成后计算机就可以识别了。

比如:洗衣机,它是一个品牌,在Java中可以将其看成是一个类别。
属性:产品品牌,型号,产品重量,外观尺寸,颜色…
功能:洗衣,烘干、定时…

类的定义格式

在Java中定义类时需要用到class关键字,具体语法如下:

//创建类
class Classname{field;//————字段(属性)或者成员变量method;//————行为或者成员方法
}

上面的代码中,class为定义类的关键字,Classname为类的名字,{}中为类的主体。
类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量(成员变量分为普通成员变量和静态成员变量)。方法主要说明类具有哪些功能,称为类的成员方法(成员方法也分为普通成员方法和静态成员方法)。

class WashMachine{public String brand;   // 品牌public String type;    // 型号public double weight;  // 重量public double length;  // 长public double width;  // 宽public double height;  // 高public String color;   // 颜色public void washClothes(){   // 洗衣服System.out.println("洗衣功能");}public void dryClothes(){    // 脱水System.out.println("脱水功能");}public void setTime(){       // 定时System.out.println("定时功能");}
}

注意:

  1. 一般一个文件当中只定义一个类
  2. main方法所在的类一般要使用public修饰(注意:Eclipse默认会在public修饰的类中找main方法)
  3. public修饰的类必须要和文件名相同
  4. 不要轻易去修改public修饰的类的名称
  5. 每一个类都会产生一个字节码文件
    在这里插入图片描述

三、类的实例化

什么是实例化

定义了一个类,就相当于在计算机定义了一种新的类型,与int,double类似,只不过int和double是Java语言自带的内置类型,而类是用户自定义的一个新的类型,比如上述的:person类,有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)

用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象。

如下图:
在这里插入图片描述
注意事项:

  1. new关键字用于创建一个对象的实例
  2. 使用 .来访问对象中的属性和方法
  3. 同一个类可以创建多个对象

类和对象的说明

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员
  2. 类是一种自定义的类型,可以用来定义变量
  3. 一个类可以实例化出多个对象,实例化出的对象占用实际的物理空间,存储类成员变量
  4. 做个比方:类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
    在这里插入图片描述
    上图左边为栈区,右边为堆区

相关文章:

【我与java的成长记】之面向对象的初步认识

系列文章目录 能看懂文字就能明白系列 C语言笔记传送门 🌟 个人主页:古德猫宁- 🌈 信念如阳光,照亮前行的每一步 文章目录 系列文章目录🌈 *信念如阳光,照亮前行的每一步* 前言一、什么是面向对象面向过程…...

面试题之二HTTP和RPC的区别?

面试题之二 HTTP和RPC的区别? Ask范围:分布式和微服务 难度指数:4星 考察频率:70-80% 开发年限:3年左右 从三个方面来回答该问题: 一.功能特性 1)HTTP是属于应用层的协议:超文本传输协议…...

初试Kafka

Kafka 是一个分布式流处理平台,通常用作消息中间件,它可以处理大规模的实时数据流。以下是从零开始使用 Kafka 作为消息中间件的基本教程: 步骤 1: 下载和安装 Kafka 访问 Apache Kafka 官方网站:Apache Kafka下载最新的 Kafka …...

SuperMap Hi-Fi 3D SDK for Unity基础开发教程

作者:kele 一、背景 众所周知,游戏引擎(Unity)功能强大,可以做出很多炫酷的游戏和动画效果,这部分功能的实现往往不仅仅是靠可视化界面就能够实现的,还需要代码开发。SuperMap Hi-Fi SDKS for …...

Upload-lab(pass1~2)

Pass-1-js检查 这里检验 因为是前端js校验,所以只用绕过js前端校验 用burp抓包修改文件类型 写一个简易版本的php Pass-2-只验证Content-type 仅仅判断content-type类型 因此上传shell.php抓包修改content-type为图片类型:image/jpeg、image/png、image/gif...

Linux:查询当前进程或线程的资源使用情况

目录 一、/proc/[PID]/下的各个文件1、proc简介2、/proc/[PID]/详解 二、通过Linux API获取当前进程或线程的资源使用情况1、getrusage2、sysinfo3、times 在工作中,我们排除app出现的一些性能/资源问题时,通常要先知道当前app的资源使用情况&#xff0c…...

unityc用vs2017介绍

21版unity能用17vs,只要在unity的Edit/Preferences/ExternalTools里面改既可。...

单元测试实战

文章目录 为什么要做单元测试?单元测试的几个核心要点是:单元测试目标单元测试框架JUnitTestNG 单元测试工具: 为什么要做单元测试? 测试代码:通过编写和运行单元测试,开发者能够快速验证代码的各个部分是否…...

WebService

调试工具:Postman、SoapUI Soap WebService :.net WCF 、Java CFX WebService三要素: SOAP(Simple Object Access Protocol):用来描述传递信息的格式, 可以和现存的许多因特网协议和格式结合使用&#x…...

Nestjs使用log4j打印日志

众所周知,nest是自带日志的。但是好像没有log4j香,所以咱们来用log4j吧~ 我只演示最简单的用法,用具体怎么样用大家可以自己进行封装。就像前端封装自己的请求一样。 一、安装 yarn add log4js stacktrace-js 二、使用 主要就三个文件&a…...

Selenium - 自动化测试框架

Selenium 介绍 Selenium 是目前用的最广泛的 Web UI 自动化测试框架,核心功能就是可以在多个浏览器上进行自动化测试,支持多种编程语言,目前已经被 google,百度,腾讯等公司广泛使用。 开发步骤 1、配置 google 驱动…...

RFID技术在汽车制造:提高生产效率、优化物流管理和增强安全性

RFID技术在汽车制造:提高生产效率、优化物流管理和增强安全性 随着科技的进步,物联网技术已经深入到各个领域,尤其在制造业中,RFID技术以其独特的优势,如高精度追踪、实时数据收集和自动化操作,正在改变传统的生产方式…...

git异常

1.异常现象 换机新安装 Git 后,拉代码时出现问题: Unable to negotiate with 10.18.18.18 port 29418: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 fatal: Could not read from rem…...

【C语言学习疑难杂症】第12期:如何从汇编角度深入理解y = (*--p)++这行代码(易懂版)

对于如下代码,思考一下输出结果是什么? int a[] = {5, 8, 7, 6, 2, 7, 3}; int y, *p = &a[1]; y = (*--p)++; printf("%d ",y); printf("%d",a[0]); 这个代码看似简单,但是在“y = (*--p)++;”这行代码里,编译器做了很多工作。 我们在vs2022的…...

5G阅信应用场景有哪些?

5G阅信的应用场景非常广泛,以下是一些常见的应用场景: 1.工业自动化:5G阅信可以连接各种工业设备和传感器,实现设备之间的实时通信和控制,提高生产效率和自动化水平。 2.物联网和智能家居:5G阅信可以连接各…...

使用OpenSSL生成自签名SSL/TLS证书和私钥

使用OpenSSL生成自签名SSL/TLS证书和私钥 前提: 系统安装了OpenSSL; 系统:windows、linux都可; 1 生成私钥 创建一个名为 server.key 的私钥文件,并使用 RSA 算法生成一个 2048 位的密钥。 openssl genrsa -out s…...

pycharm2023.2激活和新建项目,python3.12安装永久换源

pycharm安装 安装版本选择链接 激活参考链接 python安装 Windows下载指定python链接 选择相应版本的64位即可。 安装可以自己选择安装位置,记得勾选,add path即可。其余下一步默认即可。 windows临时换源 pip install 模块包名字 -i https://pypi.…...

FPGA分频电路设计(2)

实验要求: 采用 4 个开关以二进制形式设定分频系数(1-10),实现对已知信号的分频。 类似实验我之前做过一次,但那次的方法实在是太笨了: 利用VHDL实现一定系数范围内的信号分频电路 需要重做以便将来应对更…...

【三】【C语言\动态规划】珠宝的最高价值、下降路径最小和、最小路径和,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利…...

爬虫工作量由小到大的思维转变---<第二十八章 Scrapy中间件说明书>

爬虫工作量由小到大的思维转变---<第二十六章 Scrapy通一通中间件的问题>-CSDN博客 前言: (书接上面链接)自定义中间件玩不明白? 好吧,写个翻译的文档点笔记,让中间件更通俗一点!!! 正文: 全局图: 爬虫中间件--->翻译笔记: from scrapy import s…...

魔百盒CM311-1s刷机后体验:安卓9.0固件到底香不香?附5621DS无线实测

魔百盒CM311-1s刷机实战:安卓9.0系统深度评测与无线性能揭秘 当手中的魔百盒CM311-1s遇上安卓9.0系统,这场硬件与软件的碰撞会擦出怎样的火花?作为一款搭载S905L3B芯片的电视盒子,其原生系统往往受限于运营商定制化限制&#xff0…...

UE5 VR开发避坑实录:从Pico串流到圆盘位移,我踩过的那些‘雷’

UE5 VR开发实战避坑指南:从Pico串流到圆盘位移的深度解析 第一次打开虚幻引擎5的VR模板时,那种兴奋感至今记忆犹新。但很快,现实就给了我一记重拳——Pico设备死活连不上开发机,项目莫名其妙闪退,圆盘位移功能在头显里…...

Anthropic《创始人手册:打造AI原生创业公司》Claude(中文精读版)完整38页pdf

Anthropic 在2026年5月发布的官方手册,聚焦 AI 原生创业的全生命周期,拆解从创意、MVP、上线到扩张的四大核心阶段,重构 AI 时代的创业逻辑。 手册核心围绕 “AI 重塑创业模式” 展开,指出 2026 年 AI 已打破技术门槛,…...

《微服务被吹上天了?我劝你别盲目跟风,这 5 种情况千万别用》

《微服务被吹上天了?我劝你别盲目跟风,这 5 种情况千万别用》 一、开头(钩子)“微服务不是银弹,而是毒药。很多团队用了微服务之后,开发效率反而下降了,系统复杂度反而上升了。”这句话不是我说…...

蓝桥杯嵌入式LCD显示避坑指南:sprintf函数格式化变量显示的正确姿势

蓝桥杯嵌入式LCD显示避坑指南:sprintf函数格式化变量显示的正确姿势 在蓝桥杯嵌入式竞赛中,LCD显示是基础但至关重要的环节。许多参赛选手在实现变量动态显示时,常常因为对sprintf函数的使用不当而陷入各种"坑"中——数据显示不全、…...

Linux网络编程实战:从Socket基础到高并发服务器设计

1. 项目概述:从套接字到应用,理解网络编程的基石当我们谈论Linux下的应用开发,尤其是那些需要与外界通信的程序时,“网络编程”是一个绕不开的核心技能。而“Internet Domain应用编程”这个听起来有些学术的标题,实际上…...

华为云API调用实战:如何用Python脚本自动获取并刷新IAM用户Token?

华为云API自动化鉴权实战:Python实现Token动态管理与高可用方案 在云原生应用开发中,服务间API调用已成为现代系统架构的基石。华为云作为国内领先的云服务提供商,其API网关的鉴权机制直接关系到业务系统的稳定性和安全性。对于中高级开发者而…...

Zabbix监控华为防火墙丢包?可能是你的SNMP v2c配置没做对(附Python巡检脚本)

Zabbix监控华为防火墙丢包问题的深度排查与自动化解决方案 当Zabbix监控华为防火墙时出现丢包或数据异常,很多工程师的第一反应是检查网络连通性或Zabbix服务器配置,却忽略了防火墙自身SNMP v2c与安全策略的联动机制。本文将揭示这一常见误区的技术根源&…...

Gmail现可语音对话式检索邮件,亮相Google IO 2026

谷歌在向Gmail注入AI功能的道路上仍未停步。本周二,在年度开发者大会Google IO 2026上,这家科技巨头宣布对Gmail的"AI收件箱"功能进行升级扩展,正式引入对话式AI交互能力。这意味着用户今后可以直接向Gmail发问,而无需再…...

从RTL到GDS:STA工程师的一天,如何用DC工具修复时序违例(以Setup Violation为例)

从RTL到GDS:STA工程师的一天,如何用DC工具修复时序违例(以Setup Violation为例) 时钟刚过上午9点,咖啡的香气弥漫在工位周围。作为数字后端工程师,我习惯在晨会前先快速扫描昨晚综合运行的日志文件。今天的…...