类和对象详解(下)-----运算符重载
目录
1.运算符重载
2.赋值运算符重载
3.取地址运算符重载
3.1const成员函数
3.2取地址运算符重载
1.运算符重载
什么是运算符重载呢?简单举个例子就懂了。
就是我想实现日期的加法,而“+”这个运算符C++只实现了内置类型的加法,而我们要想实现日期类的加法就得自己写,如下:
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year=1, int month=1, int day=1){_year = year; _month = month, _day = day;}Date(const Date& d){_year =d._year; _month = d._month, _day = d._day;}Date operator+(int a){Date d1(this->_year, this->_month, this->_day + a);return d1;}void print(){cout << this->_year << " " << this->_month << " " << this->_day;}
};
int main()
{Date d1(2025,2,16);d1 = d1 + 5;d1.print();return 0;
}
现在我们就可以运行了(注意,日期的加法并没有那么简单,这里只是简单写了一下),我们细细拆解一下,为什么刚才加号不能用,现在就能用了呢?
来看重载函数
Date operator+(int a);
前面的Date是这个函数的返回值,operator+代表是对加号进行运算符重载,然后括号里面代表需要的参数,现在我们来回忆加法的使用情况首先,加法需要两个操作数,一定是A+B,两个操作数,而函数的参数就是从左到右对应的操作数,那有的同学就会注意到,我这里面的函数参数只有一个,这里就要注意,我是类内实现的,类内实现默认这个类的对象为第一个操作数,接下来我写到类外给大家看一下:
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year=1, int month=1, int day=1){_year = year; _month = month, _day = day;}Date(const Date& d){_year =d._year; _month = d._month, _day = d._day;}void print(){cout << this->_year << " " << this->_month << " " << this->_day;}
};
Date operator+(Date d,int a)
{Date d1(d._year, d._month, d._day + a);return d1;
}
int main()
{Date d1(2025,2,16);d1 = d1 + 5;d1.print();return 0;
}
同样这个代码也可以正常运行,那我们接下来来验证一下从左到右的,我们稍微修改一下代码,
仅把两个操作数的位置换了,就出现了报错,印证了我们之前的说法,接着给大家展示一下常用的一种写法,类内声明,类外实现,也就是域名的使用
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year=1, int month=1, int day=1){_year = year; _month = month, _day = day;}Date(const Date& d){_year =d._year; _month = d._month, _day = d._day;}Date operator+(int a);void print()
};
Date Date::operator+(int a)
{Date d1(_year, _month, _day + a);return d1;
}
void Date::print()
{cout << this->_year << " " << this->_month << " " << this->_day;
}
int main()
{Date d1(2025,2,16);d1 = d1 + 5;d1.print();return 0;
}
为什么要类内声明,类外使用呢? 目的是增强代码的可读性,而且默认不是内联(内联函数太长的话影响代码效率)。
注意不是所有运算符都可以重载的,有五个就不能重载:
.* :: sizeof ?: .
且
重载操作符⾄少有⼀个类类型参数,不能通过运算符重载改变内置类型对象的含义,如: int operator+(int x, int y)
这里再给大家介绍一种运算符的重载,即对“<<”和“>>”的重载
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year=1, int month=1, int day=1){_year = year; _month = month, _day = day;}Date(const Date& d){_year =d._year; _month = d._month, _day = d._day;}void operator<<(ostream&out);
};
void Date::operator<<(ostream& out)
{out << _year << " " << _month << " " << _day;
}
int main()
{Date d1(2025,2,16);cout << d1;return 0;
}
这里我们可以看到,实现的代码,但是他会报错,why?
因为我们将其当成了类内的成员函数,此时成员为第一个变量,而<<这个运算符有两个操作数cout<<A本应cout为第一个变量,但此时成员为一个变量,那我们怎么让他发挥出作用呢。就是这样
而这样很明显不符合我们的使用习惯,所以怎么解决呢?答案就是不要将其放到类内,直接类外实现
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year=1, int month=1, int day=1){_year = year; _month = month, _day = day;}Date(const Date& d){_year =d._year; _month = d._month, _day = d._day;}};
void operator<<(ostream& out,const Date&d)
{out << d._year << " " << d._month << " " << d._day;
}
int main()
{Date d1(2025,2,16);cout<<d1;return 0;
}
这样就可以了。这里还有一个比较容易犯的错误,顺便给大家说一下
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year = 1, int month = 1, int day = 1){_year = year; _month = month, _day = day;}Date(const Date& d){_year = d._year; _month = d._month, _day = d._day;}Date&operator+(int a);void print();
};
Date&Date::operator+(int a)
{Date d1(_year, _month, _day + a);return d1;
}
void Date::print()
{cout << this->_year << " " << this->_month << " " << this->_day;
}
void test()
{int d = 3;int a = 3;int e = 3;int w = 3;int c = 3;
}
int main()
{Date d1(2025, 2, 16);Date&d2 = d1 + 5;test();d2.print();return 0;
}
运行结果
为什么呢?我们在进行运算符重载的时候,返回值为引用返回
他返回了d1,不会进行拷贝构造,而d1是个局部变量,当函数结束的时候就会销毁,而我们在外部用一个引用来接收,此时d2就是局部变量的别名了, 然后再调用一个函数,在里面创建一些变量,就可能把旧的局部变量的空间上的值破坏掉,就会出现这些莫名其妙的错误了。
2.赋值运算符重载
特点:
1. 赋值运算符重载是⼀个运算符重载,规定必须重载为成员函数。赋值运算重载的参数建议写成 const 当前类类型引⽤,否则会传值传参会有拷⻉
2. 有返回值,且建议写成当前类类型引⽤,引⽤返回可以提⾼效率,有返回值⽬的是为了⽀持连续赋 值场景。
3. 没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认拷 ⻉构造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义 类型成员变量会调⽤他的赋值重载函数。
他和之前的拷贝构造差不多,一般在动态开辟之后才需要我们自己显式的去实现赋值运算符的重载,其他时候一般默认的就够了
3.取地址运算符重载
3.1const成员函数
• 将const修饰的成员函数称之为const成员函数,const修饰成员函数放到成员函数参数列表的后⾯。
• const实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进⾏修改。 const 修饰Date类的Print成员函数,Print隐含的this指针由 Date* const this 变为 const Date* const this
具体的应用场景,如果d1用const修饰,那我们就不能用一些函数,因为可能会修改它的值的风险(属于权限放大),所以我们这时就能加入const成员函数
#include<iostream>
using namespace std;
class Date {
public:int _year;int _month;int _day;Date(int year = 1, int month = 1, int day = 1){_year = year; _month = month, _day = day;}Date(const Date& d){_year = d._year; _month = d._month, _day = d._day;}Date&operator+(int a);void print()const;
};
Date&Date::operator+(int a)
{Date d1(_year, _month, _day + a);return d1;
}
void Date::print()const
{cout << this->_year << " " << this->_month << " " << this->_day;
}int main()
{const Date d1(2025, 2, 16);d1.print();return 0;
}
所以我们一般能加就加,注意这里可以权限缩小,如
这里编译器是允许的。
3.2取地址运算符重载
取地址运算符重载分为普通取地址运算符重载和const取地址运算符重载,⼀般这两个函数编译器⾃动 ⽣成的就可以够我们⽤了,不需要去显⽰实现。除⾮⼀些很特殊的场景,⽐如我们不想让别⼈取到当前类对象的地址,就可以⾃⼰实现⼀份,胡乱返回⼀个地址。
相关文章:
类和对象详解(下)-----运算符重载
目录 1.运算符重载 2.赋值运算符重载 3.取地址运算符重载 3.1const成员函数 3.2取地址运算符重载 1.运算符重载 什么是运算符重载呢?简单举个例子就懂了。 就是我想实现日期的加法,而“”这个运算符C只实现了内置类型的加法,而我们要想实…...
Visonpro 检测是否有缺齿
一、效果展示 二、上面是原展开工具CogPolarUnwrapTool; 第二种方法: 用Blob 和 CogCopyRegionTool 三、 用预处理工具 加减常数,让图片变得更亮点 四、圆展开工具 五、模板匹配 六、代码分解 1.创建集合和文子显示工具 CogGraphicCollec…...
(萌新入门)如何从起步阶段开始学习STM32 ——2 我应该学习HAL库还是寄存器库?
概念 笔者下面需要介绍的是库寄存器和HAL库两个重要的概念,在各位看完之后,需要决定自己的学习路线到底是学习HAL呢?还是寄存器呢?还是两者都学习呢? 库寄存器 库寄存器就是简单的封装了我们对寄存器的操作…...
【SQL技术】不同数据库引擎 SQL 优化方案剖析
一、引言 在数据处理和分析的世界里,SQL 是不可或缺的工具。不同的数据库系统,如 MySQL、PostgreSQL(PG)、Doris 和 Hive,在架构和性能特点上存在差异,因此针对它们的 SQL 优化策略也各有不同。这些数据库…...
什么是原型?
在 JavaScript 中,原型(Prototype)是每个 JavaScript 对象都有的一个属性,用来实现对象之间的继承。原型是 JavaScript 面向对象编程的核心概念之一,通过原型链(prototype chain),一…...
【第10章:自然语言处理高级应用—10.4 NLP领域的前沿技术与未来趋势】
各位技术探险家们,今天我们要开启一场穿越语言智能奇点的时空之旅。从正在改写物理定律的万亿参数大模型,到能看懂《星际穿越》剧本的跨模态AI,再到正在颠覆编程方式的神经-符号混合系统……这篇万字长文将带你摸清NLP技术进化的七块关键拼图。(建议边读边做笔记,文末有技…...
41.日常算法
1.面试题 02.04. 分割链表 题目来源 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你不需要 保留 每个分区中各节点的初始相对位置。 示例 1: 输入:…...
CPP集群聊天服务器开发实践(五):nginx负载均衡配置
1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天,为了提升并发量最直观的办法需要水平扩展服务器的数量,三台服务器可以容纳六万左右的客户端。 负载均衡器的作用: 把client的请求按照负载均衡算法分发到具体…...
Java 中的 HashSet 和 HashMap 有什么区别?
一、核心概念与用途 特性HashSetHashMap接口实现实现 Set 接口(存储唯一元素)实现 Map 接口(存储键值对)数据存储存储单个对象(元素唯一)存储键值对(键唯一,值可重复)典…...
AI大模型的技术突破与传媒行业变革
性能与成本:AI大模型的“双轮驱动” 过去几年,AI大模型的发展经历了从实验室到产业化的关键转折。2025年初,以DeepSeek R1为代表的模型在数学推理、代码生成等任务中表现超越国际头部产品,而训练成本仅为传统模型的几十分之一。这…...
Golang学习01:Go安装和配置+Vscode、GoLand安装激活+Go环境变量避坑的超详细教程
🪁🍁 希望本文能给您带来帮助,如果有任何问题,欢迎批评指正!🐅🐾🍁🐥 文章目录 一、背景二、Go语言安装2.1 Go语言环境安装2.2 Go语言环境验证2.3 其他配置 三、开发环境…...
案例-06.部门管理-根据ID查询
一.根据ID查询-接口文档 二.根据ID查询-Controller层 package com.gjw.controller;/*** 部门管理Controller*/import com.gjw.anno.Log; import com.gjw.pojo.Dept; import com.gjw.pojo.Result; import com.gjw.service.DeptService; import com.gjw.service.impl.DeptServi…...
解决No matching client found for package name xxx编译报错的问题
如果Android工程编译报错,并且信息如下: Execution failed for task :app:processDebugGoogleServices. > No matching client found for package name com.demo.test可能的原因为google-services.json中定义的package_name属性跟app当前的包名不符&…...
基于deepseek api和openweather 天气API实现Function Calling技术讲解
以下是一个结合DeepSeek API和OpenWeather API的完整Function Calling示例,包含意图识别、API调用和结果整合: import requests import json import os# 配置API密钥(从环境变量获取) DEEPSEEK_API_KEY os.getenv("DEEPSEE…...
什么是全局污染,怎么避免全局污染?
具体表现: 全局变量:当变量在全局作用域(通常是 window 对象)中定义时,它会在整个应用程序中都可访问。这个变量可能会被其他部分的代码意外修改或覆盖,导致难以追踪和调试错误。 命名冲突:全局…...
机器视觉--switch语句
引言 在 Halcon 这个强大的机器视觉软件里,编程控制结构对于高效处理图像任务至关重要。其中,Switch 语句作为一种多分支选择结构,能够根据不同的条件值执行不同的代码块,让程序的逻辑更加清晰和简洁。本文将全面深入地介绍 Halc…...
C++ std::atomic可以使用复杂类型(类和结构体)吗
目录 1.引言 2.std::atomic 支持的复杂类型 3.std::atomic与无锁 4.如何使用 std::atomic 保护复杂类型 4.1.使用互斥锁(Mutex) 4.2.使用 std::atomic_flag 和自旋锁 4.3.原子共享指针(Atomic Shared Pointers) 4.4.使用高…...
音乐随想、日语认识
Rapport的日文歌词(初) Rapport - キタニタツヤ 词:キタニタツヤ 《《 ki ta ni ta tsu ya 歌手的名字,全是片假名,不是本土的平假名(为了国外市场的做法?) 》》 曲:キタニタツヤ 编曲&am…...
SpringBoot速成(11)更新用户头像,密码P13-P14
更新头像: 1.代码展示: 1.RequestParam 是 Spring MVC 中非常实用的注解,用于从 HTTP 请求中提取参数并绑定到控制器方法的参数上。 2.PatchMapping 是 Spring MVC 中的一个注解,用于处理 HTTP 的 PATCH 请求。PATCH 请求通常用于对资源的部…...
自动化测试面试会问哪些?
自动化测试面试1: 1、使用什么测试框架做的上一个项目的自动化测试。 2、自己最熟悉哪个库,如何使用这些库的,是否做了基于复用的封装,怎么考虑的这些封装 3、如何定位app上的元素 4、//*[contains(text,"登录")] 是…...
SQL Server 导入Excel数据
1、选中指定要导入到哪个数据库,右键选择 》任务 》导入数据 2、数据源 选择Excel,点击 下一步(Next) 3、目前 选择OLE DB Provider ,点击 下一步(Next) 4、默认 ,点击 下一步(Next)…...
车载音频架构图详解(精简)
目录 上图是车载音频架构图,对这个图我们进行详细的分析 左边第一层 是 app 常用的类有MediaPlayer和MediaRecorder, AudioTrack和AudioRecorder 第二层 是framework提供给应用的多媒体功能的API类,封装在android.media.* API包中。编译后,在framework.jar中。...
基于SpringBoot+Vue的智慧校园管理系统设计和实现(源码+文档+部署讲解)
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 .🚀 技术架构技术栈全景 🎯 功能模块功能矩阵表📊 数据库设计核心ER关系图 💻 核心…...
浏览器打印局部网页,设置页眉
占位的页眉 重点部分 1.样式间隙 page { margin-top: 60px; /* 为页眉留出空间,页眉的高度要和他一样 */ top-right { height: 60px; 同时右侧,内容布局右上角要留出60px的 2.背景图片 如果页眉…...
腿足机器人之六- 前向运动学
腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵(平移旋转的统一表示) 运动链建模串联运动链结构(从基座到末端的关节连接)标准Denavit-Hartenberg(D-H)参数法改进D-H参…...
对openharmony HDF驱动框架的C/S设计模式和单例类的说明
在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想,例如类继承、接口、单例类等,本来应该是好事情,**但使用时对象之间的关系交错复杂,不太符合linux内核分层分模块的思路,导致整体理解起来比较困难&…...
kamailio中Core Cookbook 核心配置手册
Core Cookbook 核心配置手册 版本: Kamailio SIP 服务器 v6.0.x (稳定版) 概述 本教程收集了 Kamailio 核心导出到配置文件的功能和参数。 注意: 本页参数未按字母顺序排列。 结构 kamailio.cfg 的结构可分为三部分: 全局参数模块设置路由块 建议按此顺序排列以保持清晰…...
AI 编程工具—Cursor 进阶篇 数据分析
AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…...
HTML、Vue和PHP文件的区别与联系
一、核心区别 类型性质执行环境功能特点.html静态标记语言浏览器直接解析定义页面结构和内容,无逻辑处理能力.vue前端框架组件文件浏览器/构建工具整合HTML模板JS逻辑CSS样式,支持动态数据绑定和组件化开发.php服务器端脚本语言文件Web服务器执行动态生…...
Map 和 Set
目录 一、搜索 概念: 模型: 二、Map 编辑 1.Map 实例化: 2. Map的常见方法: 3.Map的常见方法演示: 1. put(K key, V value):添加键值对 3. containsKey(Object key):检查键是否存在 4.…...
白话大模型LLM-通用基础入门知识-适合给纯小白的入门!
文章目录 什么是大模型大模型训练预训练监督微调SFTRLHF基于人类反馈的强化学习 大模型分类大语言模型-LLM多模态模型-VLM视觉模型音频模型 大模型工作流程分词化与词表映射大模型回答过程 & 基于token的概率预测 Agent导论子任务拆分 什么是大模型 大模型就是训练的一个能…...
线程进入WAITING的N种方式
目录 一、调用 Object 的 wait 方法 二、调用 Thread.join 方法 三、调用LockSupport.park()方法 一、调用 Object 的 wait 方法 public static void main(String[] args) throws InterruptedException {// 创建一个锁对象Object lock new Object();Thread thread new Thr…...
智能车摄像头开源—8 元素处理
目录 一、前言 二、无元素状态 三、直线与弯道 四、十字与环岛 1、十字识别处理 2、环岛识别处理 五、坡道 六、障碍物 七、斑马线 八、入库 九、出界停车 一、前言 在写这篇文章之前,考虑了很久到底该写到什么程度,但思来想去,不同…...
【从0做项目】Java搜索引擎(4)——性能优化~烧脑~~~
本篇文章将对项目搜索引擎(1)~(3)进行性能优化,包括测试,优化思路,优化前后对比 目录 一:文件读取 二:实现多线程制作索引 1:代码分析 2:代码…...
人工智障的软件开发-git仓库篇-弃gitlab,走gitea
指令接收:「开始构建代码宇宙」 系统检测:需求模糊度99.9% 启动应急协议:构建最小可行性生态圈 核心组件锁定:代码基因库(人类称之为Git仓库) 需求分析:论人类语言的艺术性 人类指令翻译机 表…...
Spring Boot 如何实现自动配置?
欢迎并且感谢大家指出我的问题,由于本人水平有限,有些内容写的不是很全面,只是把比较实用的东西给写下来,如果有写的不对的地方,还希望各路大牛多多指教!谢谢大家!🥰 大家如果对Java…...
STM32H743ZIT6 FreeRTOS CMSIS_V2 Lwip DP83848/LAN8720 最新HAL V1.12.1版本 AC6编译器,速通。
HAL库版本:V1.12.1 最新版 这版CUBEmx生成的LAN8742 的驱动文件有问题,无法正常初始化,导致无法PING通。 lwip 内存池 不需要手动指定0x30040200区域,lwipopts.h已作配置 开启DCACH 和ICACH 和 D2域SRAM3 时钟 /*** brief Th…...
C# 添加图标
一、前言 为应用程序添加图标是优化用户界面、提升应用辨识度的重要操作。合适的图标能帮助用户快速识别和区分不同应用,增强应用的易用性和专业性。 本指南旨在为你提供详细、易懂的步骤,教你如何为应用程序的窗体添加图标。从图标素材的获取到具体的…...
MVC模式和MVVM模式
目录 一、MVC模式和MVVM模式 1. MVC模式 2. MVVM 模式 3.在Qt中的应用示例 4.总结 二、MVC与MVVM模式的共同点和区别 1.共同点 2.区别 3.交互流程 4.总结 MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)是两种…...
【kafka系列】Kafka如何实现高吞吐量?
目录 1. 生产者端优化 核心机制: 关键参数: 2. Broker端优化 核心机制: 关键源码逻辑: 3. 消费者端优化 核心机制: 关键参数: 全链路优化流程 吞吐量瓶颈与调优 总结 Kafka的高吞吐能力源于其生…...
如何学习Elasticsearch(ES):从入门到精通的完整指南
如何学习Elasticsearch(ES):从入门到精通的完整指南 嘿,小伙伴们!如果你对大数据搜索和分析感兴趣,并且想要掌握Elasticsearch这一强大的分布式搜索引擎,那么你来对地方了!本文将为…...
GDB QUICK REFERENCE (GDB 快速参考手册)
GDB QUICK REFERENCE {GDB 快速参考手册} References GDB QUICK REFERENCE GDB Version 4 https://users.ece.utexas.edu/~adnan/gdb-refcard.pdf 查看方式:在新标签页中打开图片 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/ [2] gdb-refc…...
Flutter_学习记录_动画的简单了解
用AnimationController简单实现如下的效果图: 1. 只用AnimationController实现简单动画 1.1 完整代码案例 import package:flutter/material.dart;class AnimationDemo extends StatefulWidget {const AnimationDemo({super.key});overrideState<AnimationDe…...
【JavaEE进阶】验证码案例
目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…...
SQL复习
SQL复习 MySQL MySQL MySQL有什么特点? MySQL 不支持全外连接。 安装 数据类型 MySQL中的数据类型分为哪些? MySQL中的数据类型主要分为三大类:数值类型、字符串类型、日期时间类型。 其中, 数值类型又分为七种:T…...
景联文科技:以精准标注赋能AI未来,打造高质量数据基石
在人工智能蓬勃发展的时代,数据已成为驱动技术革新的核心燃料,而高质量的数据标注则是让AI模型从“感知”走向“认知”的关键桥梁。作为深耕数据服务领域的创新者,景联文科技始终以“精准、高效、安全”为核心理念,为全球AI企业提…...
蓝桥杯(B组)-每日一题(阶乘求和)
题目 代码解析: #include<iostream> using namespace std;long long multiply(int x) {long long sum1;//定义longlong类型初始为1 for(int i1;i<x;i)sumsum*i;//每一项的阶乘 return sum;//将阶乘结果返回 }int main() {int n;cin>>n;long long r…...
大模型应用开发时如何调试提示词?
在编程领域,调试通常依赖于断点、堆栈跟踪和详细的错误信息。然而,在提示调试的上下文中,这些传统工具变得不再适用。提示调试更多地依赖于对任务的理解、对提示的精细调整,以及对结果的迭代优化。在本文,我们将深入探…...
国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异
1 换行符格式 1.1 应用场景 稍微了解计算机历史的人都知道, 计算机3大操作系统: Windows、Linux/Unix、MacOS,这3大系统对文本换行的定义各不相同,且互不相让,导致在文件的兼容性方面存在一些问题,比如它们…...
LockSupport
文章目录 SynchronizedJUCLockSupport详解 Synchronized package com.xd;public class SynchronizedDemo {//等待线程public void waitThread() { // 1.如果将synchronized (this){}注释,会抛出异常,因为wait和notify⼀定要在同步块或同步⽅法中synchronized (this) {try {Sys…...