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

【潜意识Java】深入理解Java中的方法重写,理解重写的意义,知道其使用场景,以及重写的访问权限限制等的完整笔记详细总结。

目录

一、方法重写是啥玩意儿

(一)定义和概念

(二)为啥要方法重写

二、方法重写的规则

(一)方法签名必须相同

(二)返回类型的要求

(三)访问权限的限制

(四)异常处理的规则

三、方法重写的示例代码

(一)简单的图形绘制示例

(二)动物发声示例

四、方法重写与方法重载的区别

(一)概念区别

(二)具体区别体现

五、方法重写在实际开发中的应用场景

(一)图形界面开发中的组件定制

(二)数据库访问层的优化

(三)游戏开发中的角色行为扩展


40d6bf9797ad42b3a4afa0af27cbf70d.jpeg

宝子们,今天咱来好好唠唠 Java 中一个超重要的概念 —— 方法重写。这玩意儿在 Java 的面向对象编程里可是起着关键作用,能让我们的代码更加灵活、可扩展,就像是给汽车换上不同的轮胎,让它能适应各种路况。不过,要真正掌握方法重写,得从一些基础概念慢慢说起。

一、方法重写是啥玩意儿

(一)定义和概念

想象一下,你有一个类,就好比是一个汽车的蓝图。这个类里有一个方法,比如是 move 方法,代表汽车怎么移动。现在,你又有一个子类,这个子类就像是基于原来汽车蓝图改进的新车型。子类可以对从父类继承来的 move 方法进行重新定义,让它的移动方式更符合这个新车型的特点,这就是方法重写。

哈哈,是不是不怎么好理解?那用专业点的话说,方法重写就是在子类中定义一个与父类中具有相同方法签名(方法名、参数列表和返回类型都相同,不过返回类型在一些情况下可以是协变的,后面会讲到)的方法,这样当通过子类对象调用这个方法时,执行的就是子类中重写后的方法,而不是父类中的方法。

(二)为啥要方法重写

  • 增强功能:比如说,父类的 draw 方法只是简单地画一个图形的轮廓,而子类继承后,想要画一个填充了颜色的图形,就可以重写 draw 方法,在原来画轮廓的基础上添加填充颜色的代码,这样就增强了 draw 方法的功能,让子类的对象能展现出更丰富的行为。
  • 适应不同需求:以动物类为例,父类有一个 makeSound 方法,对于不同的子类,比如狗类和猫类,它们发出的声音是不一样的。狗是 “汪汪” 叫,猫是 “喵喵” 叫。通过在狗类和猫类中重写 makeSound 方法,就能让每个子类的对象发出符合自身特点的声音,从而适应了不同动物的行为需求。

二、方法重写的规则

(一)方法签名必须相同

 

  • 方法名一致:这很好理解,就像你要重写一个 openDoor 方法,在子类里也得叫 openDoor,不能改成别的名字,不然 Java 就不知道你是在重写父类的方法了。
  • 参数列表相同:参数的数量、类型和顺序都得一模一样。比如说父类的 calculate 方法接受两个 int 类型的参数,子类重写的 calculate 方法也得接受两个 int 类型的参数,不能多一个少一个,也不能把 int 换成其他类型,否则就不是方法重写,而是一个新的方法重载(这是另外一个概念,宝子们别搞混了哦)。

(二)返回类型的要求

 

  • 基本数据类型和无返回值:如果父类方法的返回类型是基本数据类型,比如 intdouble 等,或者是 void(无返回值),那么子类重写的方法返回类型必须和父类完全一致。例如,父类的 getCount 方法返回 int 类型,子类重写的 getCount 方法也必须返回 int 类型。
  • 引用数据类型的协变返回类型:如果父类方法的返回类型是一个引用数据类型,比如一个类或者接口,那么子类重写的方法返回类型可以是这个父类返回类型的子类。这就叫做协变返回类型。比如说,父类的 createShape 方法返回 Shape 类型,子类重写这个方法时,可以返回 Circle 类型(假设 Circle 是 Shape 的子类),这样做是合法的,而且更加灵活,能让子类返回更具体的类型,同时又保证了和父类方法的兼容性。

(三)访问权限的限制

子类重写方法的访问权限不能比父类中被重写的方法更严格。也就是说,如果父类的方法是 public 的,子类重写的方法可以是 public 或者 protected(但一般不建议把 public 改成 protected,除非有特殊的设计需求),但不能是 private 或者默认(包访问权限),因为这样会导致子类的方法无法在父类方法可访问的范围内被调用,就违背了方法重写的初衷。例如,父类的 display 方法是 public 的,子类重写的 display 方法可以是 public,但如果写成 private,那就错啦。

(四)异常处理的规则

子类重写方法抛出的异常类型不能比父类被重写方法抛出的异常类型更宽泛,只能是父类抛出异常类型的子类或者不抛出异常。这是为了保证在使用多态性时,通过父类引用调用方法时,不会出现意想不到的异常情况。比如说,父类的 processData 方法抛出 IOException,子类重写这个方法时,可以抛出 FileNotFoundException(因为 FileNotFoundException 是 IOException 的子类),或者不抛出任何异常,但不能抛出 Exception(因为 Exception 比 IOException 更宽泛)。

054f570a4513459ba6e117be1a800a6f.png

三、方法重写的示例代码

(一)简单的图形绘制示例

// 父类 Shape
class Shape {public void draw() {System.out.println("绘制一个基本图形");}
}// 子类 Circle,继承自 Shape
class Circle extends Shape {@Overridepublic void draw() {System.out.println("绘制一个圆形");}
}// 子类 Rectangle,继承自 Shape
class Rectangle extends Shape {@Overridepublic void draw() {System.out.println("绘制一个矩形");}
}public class MethodOverrideExample1 {public static void main(String[] args) {Shape shape1 = new Circle();Shape shape2 = new Rectangle();shape1.draw();shape2.draw();}
}

在这个例子中,Shape 类有一个 draw 方法,Circle 和 Rectangle 子类分别重写了这个方法,当通过父类 Shape 的引用指向子类对象并调用 draw 方法时,会执行子类中重写后的 draw 方法,分别输出 “绘制一个圆形” 和 “绘制一个矩形”,这就体现了方法重写的多态性效果。

(二)动物发声示例

// 父类 Animal
class Animal {public void makeSound() {System.out.println("动物发出声音");}
}// 子类 Dog,继承自 Animal
class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("汪汪汪");}
}// 子类 Cat,继承自 Animal
class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("喵喵喵");}
}public class MethodOverrideExample2 {public static void main(String[] args) {Animal dog = new Dog();Animal cat = new Cat();dog.makeSound();cat.makeSound();}
}

我解释一下哈,这里,Animal 类的 makeSound 方法在 Dog 和 Cat 子类中被重写,通过父类引用调用 makeSound 方法时,分别输出狗和猫各自特有的叫声,展示了方法重写如何让不同子类的对象表现出独特的行为。

四、方法重写与方法重载的区别

(一)概念区别

  • 方法重写(Override):如前所述,是在子类中对父类的同名同参数列表方法进行重新定义,目的是改变方法的实现细节或者增强功能,以适应子类的特定需求,同时保持方法签名的一致性,从而实现多态性。
  • 方法重载(Overload):是在同一个类中定义多个方法名相同但参数列表不同(参数的数量、类型或者顺序不同)的方法。方法重载的目的是为了提供多种不同的操作方式,让调用者可以根据不同的参数情况选择合适的方法来执行。例如,一个 Calculator 类中可以有多个 add 方法,一个接受两个 int 参数,一个接受两个 double 参数,还有一个接受三个 int 参数,这样在进行加法运算时,可以根据传入的数据类型和数量选择合适的 add 方法。

这个往往有些人工作了,都不一定会的

(二)具体区别体现

  • 方法签名:方法重写要求方法签名完全相同(除了协变返回类型的情况),而方法重载要求方法名相同但参数列表不同,这是它们最明显的区别。
  • 返回类型:方法重写对于返回类型有严格的规则(如前面所讲的基本数据类型和引用数据类型的情况),而方法重载与返回类型无关,只要方法名和参数列表不同,返回类型可以相同也可以不同。
  • 调用方式:方法重写是通过父类引用指向子类对象,然后调用重写后的方法,实现多态性;而方法重载是在同一个类中,根据不同的参数情况,在编译时就确定调用哪个具体的重载方法。

下面通过代码示例来更清楚地展示它们的区别:

class MathOperations {// 方法重载示例public int add(int num1, int num2) {return num1 + num2;}public double add(double num1, double num2) {return num1 + num2;}public int add(int num1, int num2, int num3) {return num1 + num2 + num3;}
}class Shape {public void draw() {System.out.println("绘制一个基本形状");}
}class Circle extends Shape {@Overridepublic void draw() {System.out.println("绘制一个圆形");}
}public class OverrideVsOverload {public static void main(String[] args) {MathOperations math = new MathOperations();// 调用不同的重载方法int result1 = math.add(2, 3);double result2 = math.add(2.5, 3.5);int result3 = math.add(1, 2, 3);Shape shape = new Circle();// 调用重写后的方法shape.draw();}
}

在这个例子中,MathOperations 类展示了方法重载,通过不同的参数列表实现了多个 add 方法;Circle 类重写了 Shape 类的 draw 方法,体现了方法重写。宝子们可以通过这个例子更清晰地看到它们的区别和各自的特点。

五、方法重写在实际开发中的应用场景

(一)图形界面开发中的组件定制

在图形用户界面(GUI)开发中,比如使用 JavaFX 或者 Swing 框架,有各种基本的组件类,如 ButtonLabel 等。我们经常需要创建自定义的组件来满足特定的界面设计需求。例如,我们可以继承 Button 类,重写它的 paint 方法,来改变按钮的外观样式,比如添加自定义的背景颜色、边框样式或者文字效果等。这样,通过方法重写,我们可以在不改变原有 Button 类基本功能的基础上,对其进行个性化的定制,使其更好地融入到我们设计的界面中。

(二)数据库访问层的优化

在企业级应用开发中,通常会有一个数据访问层(DAO)来与数据库进行交互。假设我们有一个通用的 BaseDAO 类,其中定义了一些基本的数据库操作方法,如 insertupdatedelete 和 select 等。对于不同的实体类(如 UserProduct 等),它们在进行数据库操作时可能有一些特定的需求。例如,在插入 User 数据时,可能需要对密码进行加密处理;在查询 Product 数据时,可能需要根据不同的条件进行复杂的查询逻辑构建。这时候,我们可以创建 UserDAO 和 ProductDAO 等子类,继承自 BaseDAO,并在子类中重写相应的数据库操作方法,如 insert 和 select 方法,来实现针对不同实体类的特定数据库操作逻辑,从而优化数据库访问层的功能,使其更加高效和灵活。

(三)游戏开发中的角色行为扩展

在游戏开发中,经常会有各种角色类,它们可能都继承自一个公共的 Character 类。Character 类中定义了一些基本的行为方法,如 moveattack 和 defend 等。对于不同的角色,比如战士、法师和刺客等,它们的这些行为方式会有所不同。战士的 attack 方法可能是近身强力攻击,法师的 attack 方法可能是远程魔法攻击,刺客的 move 方法可能更加敏捷快速。通过在各个角色子类中重写这些方法,我们可以赋予每个角色独特的行为特点,让游戏更加丰富和有趣,同时也遵循了面向对象编程的开闭原则,即对扩展开放,对修改关闭,方便后续添加新的角色类型或者修改角色行为。

宝子们,方法重写在 Java 编程中是一个非常强大且实用的特性,它让我们的代码能够更好地适应各种变化和需求,实现更加灵活和优雅的设计。希望通过这篇文章,大家对方法重写有了更深入、更全面的理解,能够在今后的编程实践中熟练运用它,写出更加高质量的代码。如果在学习过程中遇到任何问题或者有不明白的地方,随时回来看看这篇文章,或者查阅更多的相关资料,不断练习和实践,相信你一定能掌握这个重要的概念!

e0637d7e91364612ae557baf1a929227.jpeg

 

相关文章:

【潜意识Java】深入理解Java中的方法重写,理解重写的意义,知道其使用场景,以及重写的访问权限限制等的完整笔记详细总结。

目录 一、方法重写是啥玩意儿 (一)定义和概念 (二)为啥要方法重写 二、方法重写的规则 (一)方法签名必须相同 (二)返回类型的要求 (三)访问权限的限制…...

Android Thread优先级和调度算法

Thread优先级设置方式&#xff1a; java&#xff1a; Process.setThreadPriority&#xff1a; android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST、Process.THREAD_PRIORITY_URGENT_AUDIO、-20) c: #include <sched.h> setpriority( https://blo…...

OpenCV-Python实战(6)——图相运算

一、加法运算 1.1 cv2.add() res cv2.add(img1,img2,dstNone,maskNone,dtypeNone) img1、img2&#xff1a;要 add 的图像对象。&#xff08;shape必须相同&#xff09; mask&#xff1a;图像掩膜。灰度图&#xff08;维度为2&#xff09;。 dtype&#xff1a;图像数据类型…...

2、C#基于.net framework的应用开发实战编程 - 设计(二、四) - 编程手把手系列文章...

二、设计&#xff1b; 二&#xff0e;四、制定设计规范&#xff1b; 编码规范在软件编程里起到了非常重要的作用&#xff0c;主要是让代码更加的规范化&#xff0c;更加的简洁&#xff0c;更加的漂亮&#xff0c;更加的能够面向对象显示。 以前那个系列就有发布C#的编码规范的文…...

DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程

目录 暴力破解low方法1方法2 mediumhighimpossible 暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码、密钥或其他安全凭证的攻击方法。它是一种简单但通常无效率的破解技术&#xff0c;适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时。暴力破解的基…...

sql字段值转字段

表alertlabel中记录变字段 如何用alertlabel表得到下面数据 实现的sql语句 select a.AlertID, (select Value from alertlabel where AlertIDa.AlertID and Labelhost) as host, (select Value from alertlabel where AlertIDa.AlertID and Labeljob) as job from (select …...

lua和C API库一些记录

相关头文件解释 lua.h&#xff1a;声明lua提供的基础函数&#xff0c;所有内容都有个前缀lua_&#xff1b; luaxlib.h&#xff1a;声明辅助库提供的函数&#xff0c;所有内容都有个前缀luaL_&#xff1b; lualib.h&#xff1a;声明了打开标准库的函数&#xff1b; 辅助库对…...

游戏引擎学习第68天

关于碰撞和交互的进展回顾 在进行引擎架构设计时&#xff0c;我们决定开始探讨如何处理游戏中的碰撞问题。举个例子&#xff0c;比如一把被投掷的剑碰到了敌人。我们希望能够响应这些事件&#xff0c;开始构建游戏中的互动机制。这些互动是游戏设计的核心部分&#xff0c;游戏…...

LeetCode430周赛T3

题目描述 给定一个只包含正整数的数组 nums&#xff0c;我们需要找到其中的特殊子序列。特殊子序列是一个长度为4的子序列&#xff0c;用下标 (p, q, r, s) 表示&#xff0c;它们满足以下条件&#xff1a; 索引顺序&#xff1a;p < q < r < s&#xff0c;且相邻坐标…...

网络:常用的以太网PHY芯片

常用的以太网PHY芯片&#xff08;物理层芯片&#xff09;主要负责将数字信号转换为适合在物理介质上传输的模拟信号。它们是网络设备&#xff08;如交换机、路由器、网卡等&#xff09;中的关键组件&#xff0c;通常工作在OSI模型中的物理层和数据链路层之间。 以下是一些常见…...

前端项目 node_modules依赖报错解决记录

1.首先尝试解决思路 npm报错就切换yarn &#xff0c; yarn报错就先切换npm删除 node_modules 跟 package-lock.json文件重新下载依 2. 报错信息&#xff1a; Module build failed: Error: Missing binding D:\vue-element-admin\node_modules\node-sass\vendor\win32-x64-8…...

小猫可以吃面包吗?

在宠物饲养日益普及的当下&#xff0c;小猫的饮食健康成为众多铲屎官关注的焦点。其中&#xff0c;小猫是否可以吃面包这一问题引发了不少讨论。 从面包的成分来看&#xff0c;其主要原料是面粉、水、酵母和盐&#xff0c;部分还会添加糖、油脂、鸡蛋、牛奶等。面粉富含碳水化…...

ACPI PM Timer

ACPI PM Timer 概述&#xff1a; ACPI PM Timer是一个非常简单的计时器&#xff0c;它以 3.579545 MHz 运行&#xff0c;在计数器溢出时生成系统控制中断&#xff08;SCI&#xff09;。它精度较低&#xff0c;建议使用其他定时器&#xff0c;如HPET或APIC定时器。 检测ACPI P…...

算法学习(19)—— 队列与 BFS

关于bfs bfs又称宽搜&#xff0c;全称是“宽度优先遍历”&#xff0c;然后就是关于bfs的三个说法&#xff1a;“宽度优先搜索”&#xff0c;“宽度优先遍历”&#xff0c;“层序遍历”&#xff0c;这三个都是同一个东西&#xff0c;前面我们介绍了大量的深度优先遍历的题目已经…...

python|利用ffmpeg按顺序合并指定目录内的ts文件

前言&#xff1a; 有的时候我们利用爬虫爬取到的ts文件很多&#xff0c;但ts文件只是视频片段&#xff0c;并且这些视频片段是需要按照一定的顺序合并的&#xff0c;通常ts文件合并输出格式为mp4格式 因此&#xff0c;本文介绍利用python&#xff0c;调用ffmpeg来批量的按自己…...

腾讯音乐:说说Redis脑裂问题?

Redis 脑裂问题是指&#xff0c;在 Redis 哨兵模式或集群模式中&#xff0c;由于网络原因&#xff0c;导致主节点&#xff08;Master&#xff09;与哨兵&#xff08;Sentinel&#xff09;和从节点&#xff08;Slave&#xff09;的通讯中断&#xff0c;此时哨兵就会误以为主节点…...

jmeter并发用户逐步递增压测找性能拐点

jmeter并发用户逐步递增压测找性能拐点 目的&#xff1a; 使用逐层递增的并发压力进行测试&#xff0c;找到单功能的性能拐点&#xff08;一般需要包含四组测试结果&#xff0c;拐点前一组&#xff0c;拐点一组&#xff0c;拐点后两组&#xff09;&#xff0c;统计响应时间、…...

跟着问题学3.2——Fast R-CNN详解及代码实战

R-CNN的不足 2014年&#xff0c;Ross Girshick提出RCNN&#xff0c;成为目标检测领域的开山之作。一年后&#xff0c;借鉴空间金字塔池化思想&#xff0c;Ross Girshick推出设计更为巧妙的Fast RCNN&#xff08;https://github.com/rbgirshick/fast-rcnn&#xff09;&#xff…...

【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍 本人机器学习小白&#xff0c;通过语言大模型百度进行搜索&#xff0c;磕磕绊绊的实现了初步效果&#xff0c;能有一些锁头效果&#xff0c;但识别速度不是非常快&#xff0c;且没有做敌友区分&#xff0c;效果不是非常的理想&#xff0c;但在4399小游戏中爽一下还是可以…...

软考高级:磁盘阵列(RAID)

** 概念讲解 ** 磁盘阵列是由多个磁盘组合成的一个大容量存储设备。它主要有以下几个作用&#xff1a; 提高存储容量&#xff1a;通过将多个磁盘组合在一起&#xff0c;可以获得比单个磁盘更大的存储容量。比如&#xff0c;一个磁盘的容量是 1TB&#xff0c;使用四个磁盘组成…...

梳理你的思路(从OOP到架构设计)_介绍Android的Java层应用框架05

1、认识ContentProvider...

torch.nn.LSTM介绍

torch.nn.LSTM 是 PyTorch 提供的一个高级封装,用于构建长短时记忆网络(LSTM)。相比手动实现,torch.nn.LSTM 更高效且支持批量处理、双向 LSTM、多层 LSTM 等功能,适合大多数实际应用。 LSTM基本原理 门控机制(Gating Mechanism)是深度学习中常见的一种设计,用于控制信…...

React 组件的通信方式

在 React 应用开发中&#xff0c;组件之间的通信是构建复杂用户界面和交互逻辑的关键。正确地实现组件通信能够让我们的应用更加灵活和易于维护。以下是几种常见的 React组件通信方式。 一、父子组件通信 1. 通过 props 传递数据&#xff08;父组件向子组件传递数据&#xff0…...

关于 覆铜与导线之间间距较小需要增加间距 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144776995 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

使用seata实现分布式事务管理

配置 版本说明&#xff1a;springCloud Alibaba组件版本关系 我用的是spring cloud Alibaba 2.2.1.RELEASE 、springboot 2.2.1.RELEASE、nacos 2.0.1、seata1.2.0,jdk1.8 seata 主要用于在分布式系统中对数据库进行事务回滚&#xff0c;保证全局事务的一致性。 seata的使用…...

【机器学习】深度学习(DNN)

文章目录 1. 神经网络结构2. 训练步骤3. 反向传播4. 为什么深&#xff0c;而不是宽&#xff08;模块化&#xff09;5. 初始化参数能否全为0&#xff1f; 1. 神经网络结构 输入层隐藏层&#xff1a;用于特征转换输出层&#xff1a;用于分类技巧&#xff1a;将网络中的参数写成矩…...

C++ 设计模式:门面模式(Facade Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 代理模式 链接&#xff1a;C 设计模式 - 中介者 链接&#xff1a;C 设计模式 - 适配器 门面模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个一致&#…...

自动化测试之Pytest框架(万字详解)

Pytest测试框架 一、前言二、安装2.1 命令行安装2.2 验证安装 三、pytest设计测试用例注意点3.1 命名规范3.2 断言清晰3.3 fixture3.4 参数化设置3.5 测试隔离3.6 异常处理3.7 跳过或者预期失败3.8 mocking3.9 标记测试 四、以案例初入pytest4.1 第一个pytest测试4.2 多个测试分…...

YOLOv10-1.1部分代码阅读笔记-conv.py

conv.py ultralytics\nn\modules\conv.py 目录 conv.py 1.所需的库和模块 2.def autopad(k, pNone, d1): 3.class Conv(nn.Module): 4.class Conv2(Conv): 5.class LightConv(nn.Module): 6.class DWConv(Conv): 7.class DWConvTranspose2d(nn.ConvTranspose2d)…...

大模型-Ollama使用相关的笔记

大模型-Ollama使用相关的笔记 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09;Postman请求样例 解决Ollama外网访问问题&#xff08;配置ollama跨域访问&#xff09; 安装Ollama完毕后&#xff0c; /etc/systemd/system/ollama.service进行如下修改&#…...

【机器学习】概述

文章目录 1. 机器学习三步骤2. 机器学习图谱2.1 任务类型 (Task)2.2 模型选择 (Methods)2.3 学习场景 (Scenario) 1. 机器学习三步骤 定义一个模型 (Define a set of function) 选择一组合适的函数来表示模型。 评估模型好坏 (Goodness of function) 找到一个损失函数&#xf…...

什么是网络安全(Cybersecurity)?

不同组织机构对网络安全&#xff08;Cybersecurity或Cyber Security&#xff09;的定义不尽相同。从目标上来说&#xff0c;网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击&#xff0c;避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…...

3_TCP/IP连接三次握手与断开四次挥手

TCP/IP 通信是网络通信的基础协议&#xff0c;分为以下主要步骤&#xff1a; 1、建立连接&#xff08;三次握手&#xff09; 目的&#xff1a;保证双方建立可靠的通信连接。 过程&#xff1a; 1>客户端发送 SYN&#xff1a;客户端向服务器发送一个 SYN&#xff08;同步&…...

基于单片机的电梯模拟控制系统

摘要: 文章主要针对基于单片机的电梯模拟控制系统进行研究,指出基于单片机的电梯模拟控制系统应用优点,并在此基础上介绍单片机控制技术,分析单片机在电梯模拟控制系统中的具体应用。 关键词: 单片机;电梯;模拟控制系统 1 基于单片机的电梯模拟控制系统应用优点概述 1…...

区块链安全常见的攻击——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】

区块链安全常见的攻击分析——ERC777 重入漏洞 ERC777 Reentrancy Vulnerability【5】 区块链安全常见的攻击合约和简单复现&#xff0c;附带详细分析——ERC777 重入漏洞 (ERC777 Reentrancy Vulnerability)【5】1.1 漏洞合约1.2 漏洞分析1.3 攻击分析1.4 攻击合约1.5 hardhat…...

MusicFree - 免费播放全网歌曲!无广告开源网络音乐聚合播放器 (安卓电脑版)

大家平常听歌可能都会在 QQ 音乐、网易云音乐、酷狗、喜马拉雅等不同平台来回切换&#xff0c;体验其实很烦。曾经推荐过不少“聚合”音乐应用&#xff0c;比如 洛雪音乐助手、Listen1 等等。 最近又有一个新选择了&#xff01;MusicFree 是一款免费开源清爽无广告的音乐播放器…...

html+css+js网页设计 美食 美拾9个页面

htmlcssjs网页设计 美食 美拾9个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff0…...

RustDesk内置ID服务器,Key教程

RustDesk内置ID服务器&#xff0c;Key教程 首先需要准备一个域名&#xff0c;并将其指定到你的 rustdesk 服务器 ip 地址上&#xff0c;这里编译采用的是Github Actions &#xff0c;说白了是就workflows&#xff0c;可以创建一些自动化的工作流程&#xff0c;例如代码的检查&a…...

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码&#xff0c;也有同学提到老师要增加数据库管理数据的功能&#xff0c;本篇文章就来介绍下python操作数据库&#xff0c;同时也对上次分享的学生管理系统进行了改进了&#xff0c;增加了数据库&#xff0c…...

Spring Boot 学习笔记

学习代码第一步&#xff1a;如何写 Hello world &#xff1f; 1、新建项目 新建一个 Maven Java 工程&#xff0c;在 pom.xml 文件中添加 Spring Boot Maven 依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spri…...

UML统一建模语言测试题汇总

2-UML概念模型测试 (单选题, 1.0 分) UML中的关系不包括&#xff08;&#xff09;。 A. 抽象 B. 实现 C. 依赖 D. 关联 我的答案:A正确答案: A 知识点&#xff1a; UML的构成 1.0分 (单选题, 1.0 分) 下列事物不属于UML结构事物的是&#xff08;&#xff09;。 A. 组件 B.…...

【微服务】SpringBoot 自定义消息转换器使用详解

目录 一、前言 二、SpringBoot 内容协商介绍 2.1 什么是内容协商 2.2 内容协商机制深入理解 2.2.1 内容协商产生的场景 2.3 内容协商实现的常用方式 2.3.1 前置准备 2.3.2 通过HTTP请求头 2.3.2.1 操作示例 2.3.3 通过请求参数 三、SpringBoot 消息转换器介绍 3.1 H…...

数据结构(哈希表(中)纯概念版)

前言 哈希表&#xff08;Hash Table&#xff09;是计算机科学中的一个基础而重要的数据结构&#xff0c;它广泛评估各种算法和系统中&#xff0c;尤其是在需要快速查找、插入和删除操作的场景中。由于其O( 1)的平均时间复杂度&#xff0c;存储表在性能要求较高的应用中表现得非…...

Node.js 工具:在 Windows 11 中配置 Node.js 的详细步骤

一、概述 记录时间 [2024-12-25] 本文讲述如何在 Windows 11 中进行 Node.js 工具的安装和配置。 以下是详细的步骤和说明。 二、安装 Node.js 1. 官网下载 通过官网&#xff0c;下载 Node.js&#xff0c;上面有好几种下载方式&#xff0c;文中下载的是 zip 压缩包。 如图&…...

工作流并行网关退回思路

问题描述 在设计工作流时遇到并行的流程&#xff0c;会出现并行流程的退回&#xff0c;这里记录下想到的解决思路&#xff0c;后续问题会记录在这里。 流程图 这里是一个简单的流程图&#xff1a; 并行退回思路 若是正常流程退回&#xff0c;流程是&#xff1a; 获取回退…...

C#数学相关开发性能优化方法

本文Github地址&#xff1a;CSharp-MathOptimization.md 华为公司的C语言编程规范在开头就强调了&#xff1a; 一般情况下&#xff0c;代码的可阅读性高于性能&#xff0c;只有确定性能是瓶颈时&#xff0c;才应该主动优化。 本文讲述的方法没有经过大项目和大公司的检验&…...

vulnhub jangow靶机

1.扫描靶机IP arp-scan -l如果扫不到靶机的话根据以下配置 启动时点击第二个 按回车 继续选择第二个 按e进入编辑 删除"recovery nomodeset" 在末尾添加"quiet splash rw init/bin/bash" Ctrlx 启动进入如下界面 passwd修改root密码 重启电脑登录root修…...

配置搜索无人机

升级ubuntu内核 https://www.bilibili.com/video/BV11X4y1h7qN/?spm_id_from333.337.search-card.all.click 进入四个内核文件并安装 sudo dpkg -i *.deb安装ROS&#xff0c;PX4&#xff0c;XTDrone&#xff0c;QGC https://blog.csdn.net/qq_45493236/article/details/13…...

2-6-1-1 QNX编程入门之进程和线程(四)

阅读前言 本文以QNX系统官方的文档英文原版资料“Getting Started with QNX Neutrino: A Guide for Realtime Programmers”为参考&#xff0c;翻译和逐句校对后&#xff0c;对在QNX操作系统下进行应用程序开发及进行资源管理器编写开发等方面&#xff0c;进行了深度整理&…...

Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II NPM永久使用淘宝源安装 cnpm安装pnpm【推荐】see also: vscode常用插件引言 淘宝镜像:http://npm.taobao.org 和 http://registry.npm.taobao.org 已在 2022.06.3…...