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

【HeadFirst系列之HeadFirstJava】第2天之类与对象-拜访对象村

前言

从今日起,陆续分享《HeadFirstJava》的读书笔记,希望能够帮助大家更好的理解Java,提高自己的基础编码能力。

Java是一门面向对象的高级编程语言,常年霸占编程语言排行榜前三。

Java是目前国内的主流开发语言,基本每家大型公司都对Java开发工程师有巨大需求,因此打好Java基本功对我们的职业生涯有很好的帮助。

今天要分享的是【类与对象-拜访对象村】,希望对大家有所帮助。

在这里插入图片描述

面向对象 vs 面向过程
面向对象会让你的生活(程序设计)更美好

书籍精华

对象村

在这里插入图片描述

//阿珠-面向过程的开发者代表
rotate(shapeNum) {//旋转360°
}
playSound(shapeNum) {//查询播放哪个AIF文件//播放
}//阿花-面向对象的开发者代表
class Square {rotate() {//code to route a square}playSound() {//code to play the AIF file for a square}
}
class Circle {rotate() {//code to route a circle}playSound() {//code to play the AIF file for a circle}
}
class Triangle {rotate() {//code to route a triangle}playSound() {//code to play the AIF file for a triangle}
}

在这里插入图片描述

//软件开发最常见的问题就是:需求变更
//针对需求变更,不同开发者有不同的解决方案//面向过程的开发者代表-阿珠
playSound(shapeNum) {//如果不是阿米巴原虫//查询使用哪个AIF文件//播放//不然//播放amoeba.hif
}//面向对象的开发者代表-阿花【新加入的类不会影响已经测试好的类,适应性和可扩展性好】
class Amoeba {rotate() {//旋转}playSound() {//播放}
}

在这里插入图片描述

//好的软件开发上线后,会不断的进行功能的迭代// 阿珠
rotate(shapeNum,xPt,yPt) {//如果不是阿米巴//计算中心点//然后旋转//否则//以xPt和yPt作为旋转中心//然后旋转
}// 阿花
class Amoeba {int xPoint;int yPoint;rotate() {//使用阿米巴的x和y坐标作为旋转中心//然后旋转}playSound() {//播放}
}

在这里插入图片描述

//过程【面向过程叫法】与方法【面向对象叫法】
//面向对象的继承(inheritance)//阿花的最终设计
class Shape {rotate() {//旋转}playSound() {//播放}
}
class Square extends Shape {//Square特有的方法
}
class Circle extends Shape {//Circle特有的方法
}
class Triangle extends Shape {//Triangle特有的方法
}
class Amoeba extends Shape {//Amoeba特有的方法
}

在这里插入图片描述

//方法的覆盖(override)
class Amoeba extends Shape {rotate() {//阿米巴声明旋转代码}playSound() {//阿米巴声明声音代码}
}

在这里插入图片描述

//面向对象的核心概念:类、对象、方法、属性

以对象来思考

在这里插入图片描述

//对象也叫实例,拥有实例变量(instance variable)和方法(methods)

在这里插入图片描述

//对象与类,类是抽象的,对象是具体的
//类是对象的蓝图,是创建对象(虚拟机创建)的模型

创建对象

在这里插入图片描述

//接下来将经常见到两种类:对象类和测试类(类名TestDrive)
//圆点运算符.用来存取对象的状态和行为
class Dog {int size;String breed;String name;void bark() {System.out.println("Ruff! Ruff!");}
}class DogTestDrive {public static void main(String[] args) {Dog d = new Dog();d.size = 40;d.bark();}
}

在这里插入图片描述

class Movie {String title;String genre;int rating;void playIt() {System.out.println("Playing the movie");}
}class MovieTestDrive {public static void main(String[] args) {Movie one = new Movie();one.title = "Gone with the Stock";one.genre = "Tragic";one.rating = -2;Movie two = new Movie();two.title = "Lost in Cubicle Space";two.rating = 5;two.playIt();Movie three = new Movie();three.title = "Byte Club";three.genre = "Tragic but ultimately uplifting";three.rating = 127;}
}

逃出main()

在这里插入图片描述

//main方法的用途:测试真正的类、启动你的Java应用程序(SpringBoot就是这样做的)

在这里插入图片描述

class Player {int number = 0;public void guess() {number = (int) (Math.random() * 10);System.out.println("I'm guessing " + number);}
}class GuessGame {Player p1;Player p2;Player p3;public void startGame() {p1 = new Player();p2 = new Player();p3 = new Player();int guessp1 = 0;int guessp2 = 0;int guessp3 = 0;boolean p1isRight = false;boolean p2isRight = false;boolean p3isRight = false;int targetNumber = (int) (Math.random() * 10);System.out.println("I'm thinking of a number between 0 and 9...");while (true) {System.out.println("Number to guess is " + targetNumber);p1.guess();p2.guess();p3.guess();guessp1 = p1.number;System.out.println("Player one guessed " + guessp1);guessp2 = p2.number;System.out.println("Player two guessed " + guessp2);guessp3 = p3.number;System.out.println("Player three guessed " + guessp3);if (guessp1 == targetNumber) {p1isRight = true;}if (guessp2 == targetNumber) {p2isRight = true;}if (guessp3 == targetNumber) {p3isRight = true;}if (p1isRight || p2isRight || p3isRight) {System.out.println("We have a winner!");System.out.println("Player one got it right? " + p1isRight);System.out.println("Player two got it right? " + p2isRight);System.out.println("Player three got it right? " + p3isRight);System.out.println("Game is over.");break;} else {System.out.println("Player will have to try again.");}}}
}class GameLauncher {public static void main(String[] args) {GuessGame game = new GuessGame();game.startGame();}
}

猜数字

在这里插入图片描述

//对象存在于【堆内存】中,这里的堆是:可回收垃圾的堆(Garbage-Collectible Heap)
//Java虚拟机会主动帮你管理内存:通过垃圾收集器

你问我答

在这里插入图片描述

书籍在线地址

HeadFirstJava中文版

代码在线地址

拜访对象村-源码地址

知识点总结

  • 1.面向过程 vs 面向对象
  • 2.类与对象
  • 3.方法的覆盖
  • 4.类的继承
  • 5.对象在内存中的存储区域
  • 6.垃圾收集器

收获

1.mac如何输入°:

shift+option+8

2.编写伪代码能力

相关文章:

【HeadFirst系列之HeadFirstJava】第2天之类与对象-拜访对象村

前言 从今日起,陆续分享《HeadFirstJava》的读书笔记,希望能够帮助大家更好的理解Java,提高自己的基础编码能力。 Java是一门面向对象的高级编程语言,常年霸占编程语言排行榜前三。 Java是目前国内的主流开发语言,基本…...

机试题——D路通信

题目描述 现在老师给了他们一个D路通信。他们面对的通信链路有如下几个性质: 高斯噪声性:如果发出一段字符串作为消息,消息的开始前和结束后可能会出现随机高斯噪声。内容完整性:该过程不会丢失任何字符,字符顺序也不…...

sqlite 查看表结构

在SQLite中,查看表结构通常有以下几种方法: 使用.schema命令 在SQLite的命令行界面中,你可以使用.schema命令加上表名来查看该表的结构。例如,如果你想查看名为your_table_name的表结构,你可以这样做: .s…...

2025清华:DeepSeek从入门到精通.pdf(附下载)

本文是一份关于如何深入理解和使用DeepSeek技术的全面指南,由清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室的余梦珑博士后及其团队编撰。DeepSeek是一家中国科技公司,专注于通用人工智能(AGI)的研发,其开源推…...

力扣LeetCode: 80 删除有序数组中的重复项Ⅱ

题目: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件…...

MoMask:可将文本描述作为输入并生成相应的高质量人体运动动作

该图展示了 MoMask (一种最先进的人体运动生成模型)生成的运动示例。MoMask 使用文本到运动范式进行操作,其中它将文本描述作为输入并生成相应的高质量人体运动。这种方法确保生成的动作准确反映给定的文本条件,展示了 MoMask 生成…...

PAT甲级1043、 Is It a Binary Search Tree

题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties: The left subtree of a node contains only nodes with keys less than the nodes key.The right subtree of a node contains only nodes with keys greater…...

【Python】元组

个人主页:GUIQU. 归属专栏:Python 文章目录 1. 元组的本质与基础概念1.1 不可变序列的意义1.2 元组与数学概念的联系 2. 元组的创建方式详解2.1 标准创建形式2.2 单元素元组的特殊处理2.3 使用 tuple() 函数进行转换 3. 元组的基本操作深入剖析3.1 索引操…...

[RabbitMQ] RabbitMQ常见面试题

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...

旋转位置编码(RoPE)讲解和代码实现

旋转位置编码(Rotary Position Embedding:RoPE)讲解和代码实现 1. 什么是位置编码? 在 Transformer 模型中,位置编码的作用是为模型提供序列中每个 token 的位置信息。因为 Transformer 本身没有像 RNN 那样的顺序结构,所以需要通过位置编码来告诉模型 token 的顺序。 …...

小红书自动化:如何利用Make批量生成爆款笔记

小红书自动化:如何利用Make制作个人自媒体中心,批量生成爆款笔记 引言 在如今信息爆炸的时代,如何高效地获取和分享优质内容,成为了每位自媒体工作者必须面对的挑战。你是否想过,如果能够将这项繁复的工作实现自动化…...

计算机组成原理 | (四)存储器

🌮🌮🌮宝子们好呀,今天继续更新我的学习笔记,教我计算机组成原理的老师是SDUCS的zrh老师,感谢z老师的教导,接下来我就放上我的手写笔记,供大家学习参考,适合大家预习和复…...

Maven 版本管理与 SNAPSHOT 详解

1. Maven 版本管理概述 在 Maven 项目中,版本号(Version)是用于区分不同软件版本的重要标识。Maven 提供了一套标准的版本管理机制,包括: 正式版本(Release Version)快照版本(SNAP…...

基于 GEE 利用 SDWI 指数进行逐月水域面积提取

目录 1 SDWI指数 2 完整代码 3 运行结果 微波遥感具有全天候、全天时工作能力,能穿透云层,不受气象条件和光照水平影响,因此近年来利用微波遥感提取水体信息也备受关注。本文分享使用 Sentinel-1遥感影像通过SDWI指数来进行逐月水域面积计…...

XMind 下载与使用教程:附百度网盘地址

一、引言 在信息爆炸的时代,如何高效地整理和管理知识成为了许多人面临的挑战。XMind 作为一款功能强大的思维导图软件,能够帮助我们清晰地梳理思路、整合信息,从而提升学习和工作效率。本文将详细介绍 XMind 的下载方法 二、XMind 的下载与…...

[EAI-034] 通过在线强化学习改进VLA模型

Paper Card 论文标题:Improving Vision-Language-Action Model with Online Reinforcement Learning 论文作者:Yanjiang Guo, Jianke Zhang, Xiaoyu Chen, Xiang Ji, Yen-Jen Wang, Yucheng Hu, Jianyu Chen 论文链接:https://arxiv.org/abs/…...

Python 和 JavaScript 中 Yield 的区别

Python 和 JavaScript 中 Yield 的区别 目录 Python 和 JavaScript 中 Yield 的区别PythonyieldJavaScriptyieldPythonyield fromJavaScriptyield* 推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 Pythonyield 在 Python 中…...

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.上传头像 -持久…...

SSM仓库物品管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码:2.保存物品信息代码:3.删除仓库信息代码: 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SSM框架开发的仓库…...

C++11新特性之unique_ptr智能指针

本节继续介绍智能指针,不了解的读者可以先阅读——C11新特性之shared_ptr智能指针-CSDN博客 1.介绍 unique_ptr是C11标准提供的另一种智能指针。与shared_ptr不同的是,unique_ptr指针指向的堆内存无法同其他unique_ptr共享,也就是每一片堆内…...

模型压缩 --学习记录2

模型压缩 --学习记录2 如何找到更好的权衡方式(模型量化)方法一:寻找更好的 range方法二:寻找更好的 X-fp32(浮点数)方法三:寻找更好的 scale 和 zp方法四:寻找更好的 roundPTQ 后训练量化(离线量化)QAT 量化感知训练(在线量化)量化为什么会带来加速?三、模型稀疏技…...

车载诊断工具技巧 --- CAPL Debug 功能使用介绍

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

Sinusoidal(正弦曲线)位置编码公式详细推导过程

Sinusoidal(正弦曲线)位置编码公式推导 参考链接 Transformer升级之路:1、Sinusoidal位置编码追根溯源 1. 前置数学的基本概念 1.1 内积 定义: 内积是两个向量之间的一种运算,其结果为一个标量。公式: 对于向量 a [ a 1 , …...

<论文>DeepSeek-R1:通过强化学习激励大语言模型的推理能力(深度思考)

一、摘要 本文跟大家来一起阅读DeepSeek团队发表于2025年1月的一篇论文《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning | Papers With Code》,新鲜的DeepSeek-R1推理模型,作者规模属实庞大。如果你正在使用Deep…...

萌新学 Python 之字符串及字符串相关函数

字符串:单引号、双引号、三个单引号、三个双引号 字符串属于不可变的数据类型,一旦被定义,内存地址不变 name 张三 # 字符串赋值给name后,内存地址存储张三,地址不变 username 张三 # 张三去内存中找…...

如何改善RK3588基于MPP的H265传输码率

1、降低帧率 由原来的30fps修改为25fps,具体修改如下: H265Level level H264Level::L_1080P_30FPS;修改为 H265Level level H264Level::L_1080P_25FPS; 同时修改在MppInit函数中修改如下内容: uint32_t fps 30;修改为uint32_t fps 2…...

系统思考—自我超越

“人们往往认为是个人的能力限制了他们,但事实上,是组织的结构和惯性思维限制了他们的潜力。”—彼得圣吉 最近和一家行业隐形冠军交流,他们已经是领域第一,老板却依然要求:核心团队都要自我超越,攻坚克难…...

redis高级数据结构Stream

文章目录 背景stream概述消息 ID消息内容常见操作独立消费创建消费组消费 Stream弊端Stream 消息太多怎么办?消息如果忘记 ACK 会怎样?PEL 如何避免消息丢失?分区 Partition Stream 的高可用总结 背景 为了解决list作为消息队列是无法支持消息多播问题,Redis5.0…...

day44 QT核心机制

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …...