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

C++:异常

---什么是异常?
异常是面向对象语法处理错误的一种方式。

---C语言传统的处理错误的方式有哪些呢?
1.返回错误码,有些API接口都是把错误码放到errno中。
2.终止程序,比如发生越界等严重问题时,我们也可以主动调用exit(xx)。例如:exit(-1)

---传统的处理错误的缺陷:
a.拿到错误码,需要查找错误码表,才知道是什么错误。
b.如果一个函数是用过返回值拿数据,发生错误时很难处理。

T& operator[](int index)//[]下标运算符不会做越界访问保护
{如果index超出容器范围,如何返回?
}

c.如果调用的函数栈很深,一层层返回错误码,处理很难受

int f1()
{//.....发生错误,返回错误码
}
int f2()
{f1();
}
int f3()
{f2();
}

---面对上面问题,C++用异常来解决: 

int x1()//基本使用
{try//检查代码段{vector<int> v = { 1,2,3,4,5,6 };for (int i = 0; i < v.size(); ++i){cout << v.at(i) << " ";//越界访问,抛出异常}cout << endl;}catch (exception& e)//捕获异常,进行处理并输出{cout << e.what() << endl;}return 0;
}

在这里需要了解vector类中,operator [] 下标运算符不会做越界访问保护,不会检查是否越界也不会抛出异常;而at()会进行越界检查,如果越界会抛出out of range的异常,此时我们用try语句来检测它是否抛出异常,并且用catch语句去捕获异常处理它。

---a.需要注意的是,在C++语法中,throw语句抛出的异常是用户自定义的,可以是任意类型。

int ddiv(int n, int m)
{//if (m == 0) throw - 1;//throw可以抛出任意类型的对象if (m == 0){throw "除0异常";//临时拷贝对象,}//可以throw整型/字符串...任意类型return n / m;
}

---b. try语句检测到异常,交给catch语句来捕获处理,是会调用最近的catch语句。

int ff()
{int n, m;cin >> n >> m;try//调用最近的catch{cout << ddiv(n, m) << endl;}catch (const string& x)//会优先调用ff函数内的catch语句{cout << x << endl;}
}
int main()
{try{ff();}catch (const string& x){cout << x << endl;}
}

---c.有多种的catch语句来捕获抛出的不同类型的异常。

int main()
{try{ff();}catch (int x)//捕获抛出的整型异常{cout << x << endl;}catch (const string& x)//捕获抛出的字符串异常{cout << x << endl;}catch (...)//捕获所有类型的异常{cout << "其它异常" << endl;}
}

---C++异常中需要注意的问题: 

---a.throw抛出的异常被catch处理后可能会导致内存泄漏,此时catch应该再抛出

double Division(int a, int b)
{// 当b == 0时抛出异常if (b == 0){throw "Division by zero condition!";}return (double)a / (double)b;
}
void Func()
{// 这里可以看到如果发生除0错误抛出异常,另外下面的array没有得到释放。// 所以这里捕获异常后并不处理异常,异常还是交给外面处理,这里捕获了再重新抛出去。int* array = new int[10];try {int len, time;cin >> len >> time;cout << Division(len, time) << endl;}catch (...){cout << "delete []" << array << endl;delete[] array;throw;}// ...cout << "delete []" << array << endl;delete[] array;
}

--- b.由于throw可以抛出各种各样的异常,这样就得有各种各样的catch语句去捕获。容易造成混乱,可以通过throw派生类,catch基类--Exception来规范异常处理:你可以自己抛自己的异常,但是必须继承这个基类,但是外层捕获基类就可以。

class Exception
{
public:Exception(const char* errmsg, int errid):_errmsg(errmsg),_errid(errid){}virtual string what()=0;//发生了什么
protected:int _errid;//错误码string _errmsg;//错误描述//stack<string> st;//调用栈帧
};
class SqlException:public Exception
{
public:SqlException(const char* errmsg, int errid):Exception(errmsg, errid){}string what(){return "数据库错误:" + _errmsg;}
};
class Network :public Exception
{
public:Network(const char* errmsg, int errid):Exception(errmsg,errid){}string what(){return "网络错误:" + _errmsg;}
};
void ser()
{//模拟一下出现问题抛异常报错if (rand() % 3 == 0) throw SqlException("数据库启动失败", 1);if (rand() % 7 == 0) throw Network("网络连接失败失败", 3);
}
int main()
{for (size_t i = 0; i < 100; ++i){try{ser();}catch (Exception& e)//用父类对象捕获,抛出的是匿名子类对象,并实现多态->父类对象指向的是子类对象{cout << "未知异常" << endl;}}return 0;
}

---c.异常破坏程序执行流所引发的问题: 

//异常带来的问题:new/fopen/lock --func()在此处抛异常-- delete/fclose
//异常规范:异常可能会导致异常安全问题--捕获重新抛出/RAII解决
//函数规范一下,如果抛异常说明,不抛也说明;但是现实中很多人觉得麻烦,不遵守规范,并不实用。
// 这里表示这个函数会抛出A/B/C/D中的某种类型的异常
void fun() throw(A,B,C,D);
// 这里表示这个函数只会抛出bad_alloc的异常
void* operator new (std::size_t size) throw (std::bad_alloc);
// 这里表示这个函数不会抛出异常
void* operator delete (std::size_t size, void* ptr) throw();
// C++11 中新增的noexcept,表示不会抛异常
thread() noexcept;
thread(thread&& x) noexcept;

---C++的异常体系:
C++ 提供了一系列标准的异常,定义在库中,我们可以在程序中使用这些标准的异常。它们是以父 子类层次结构组织起来的,如下所示:
 

总结: 
---优点:
//1.清晰的包含错误
//2.面对 T operator[](int i)这样函数越界错误,异常可以很好的解决
//3.多层调用时,里面发生错误,不再需要层层处理,最外层直接捕获即可
//4.很多第三方库使用异常,我们也使用异常可以更好的使用他们。比如:boost\gtest\gmock
---缺点:
//1.异常会导致执行流乱跳。会给我们分析程序Bug带来一些困难。
//2.C++没有GC(资源回收),异常可能导致资源泄露等异常安全问题。需要学会使用RAII来解决。
//3.C++的库里面的异常体系定义不太好用,很多公司会选择自己定义。
//4.C++的异常语言可以抛任意类型的异常,如果项目中没有做很好的规范管理,会非常混乱,所以一般需要定义出继承体系的异常规范。
异常整体而言还是一个利大于弊的东西,所以实际日常练习或小项目,不太使用,公司一般还是会使用异常来处理错误。

相关文章:

C++:异常

---什么是异常&#xff1f; 异常是面向对象语法处理错误的一种方式。 ---C语言传统的处理错误的方式有哪些呢&#xff1f; 1.返回错误码&#xff0c;有些API接口都是把错误码放到errno中。 2.终止程序&#xff0c;比如发生越界等严重问题时&#xff0c;我们也可以主动调用exit…...

winScp连接Ubantu系统,访问拒绝的解决方式

一、原理分析 win10系统能够通过WinScp连接到Ubantu系统的前提是Ubantu系统开启ssh服务 二、解决步骤 1、Ubantu系统开启ssh服务 更新软件列表 sudo apt update安装OpenSSH服务器 sudo apt install openssh-server开启SSH服务 service sshd start到此&#xff0c;winScp…...

Oracle 建表的存储过程

建表的存储过程 下面是建表的存储过程&#xff0c;用途&#xff1a;通过不同的表&#xff0c;根据不同过滤条件&#xff0c;得到某个字段&#xff0c;例如neid&#xff0c;然后创建一个新表T&#xff0c;表T的表名为拼接XXXX_XXX_neid&#xff0c;表T的字段自行添加 xxx&…...

芯科科技率先支持Matter 1.4,推动智能家居迈向新高度

Matter 1.4引入核心增强功能、支持新设备类型&#xff0c;持续推进智能家居互联互通 近日&#xff0c;连接标准联盟&#xff08;Connectivity Standard Alliance&#xff0c;CSA&#xff09;发布了Matter 1.4标准版本。作为连接标准联盟的重要成员之一&#xff0c;以及Matter标…...

pandas快速解决空列表问题

在使用 Pandas 处理数据时&#xff0c;我们经常会遇到包含空列表&#xff08;即空值或缺失值&#xff09;的问题。Pandas 提供了一些非常有效的方法来处理这些空列表&#xff0c;使得数据清理和预处理变得更加简单和高效。 以下是一个示例&#xff0c;展示如何使用 Pandas 快速…...

sentinel使用手册

1.引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency>2.yaml spring:cloud:sentinel:transport:dashboard: localhost:8090 #sentinel控制台地址…...

【继承】—— 我与C++的不解之缘(十九)

前言&#xff1a; 面向对象编程语言的三大特性&#xff1a;封装、继承和多态 本篇博客来学习C中的继承&#xff0c;加油&#xff01; 一、什么是继承&#xff1f; ​ 继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段&#xff0c;它允许我们在保持原有类…...

腾讯微众银行大数据面试题(包含数据分析/挖掘方向)面试题及参考答案

为什么喜欢使用 XGBoost,XGBoost 的主要优势有哪些? XGBoost 是一个优化的分布式梯度增强库,在数据科学和机器学习领域应用广泛,深受喜爱,原因主要在于其众多突出优势。 首先,它的精度高,在许多机器学习竞赛和实际应用中,XGBoost 都展现出卓越的预测准确性。其基于决策…...

组合数练习题——c++

题目设置&#xff1a; 现在有x个相同的小球&#xff0c;分给y个人&#xff0c;每个人至少分k个&#xff0c;请问有多少种可能的分发方法&#xff0c;由于结果可能较大&#xff0c;答案对10^97取模。 输入格式&#xff1a; 一行3个整数&#xff1a;x&#xff0c;y, k&#xf…...

Java:JPMS模块化开发

JPMS&#xff08;Java Platform Module System&#xff09;简介 为什么用JPMS&#xff1f; JPMS&#xff08;Java 平台模块系统&#xff09;是 Java 9 引入的模块化系统&#xff0c;也称为 Jigsaw 项目。它为 Java 提供了更精细的模块化机制&#xff0c;用于组织和管理代码&a…...

Spring Boot中配置Flink的资源管理

在 Spring Boot 中配置 Flink 的资源管理&#xff0c;需要遵循以下步骤&#xff1a; 添加 Flink 依赖项 在你的 pom.xml 文件中&#xff0c;添加 Flink 和 Flink-connector-kafka 的依赖项。这里以 Flink 1.14 版本为例&#xff1a; <!-- Flink dependencies --><de…...

【ruby on rails】dup、deep_dup、clone的区别

一、区别 dup 浅复制&#xff1a;dup 方法创建对象的浅复制。 不复制冻结状态&#xff1a;dup 不会复制对象的冻结状态。 不复制单例方法&#xff1a;dup 不会复制对象的单例方法。 deep_dup 深复制&#xff1a;deep_dup 方法创建对象的深复制&#xff0c;递归复制嵌套的对象。…...

鸿蒙开发-HMS Kit能力集(应用内支付、推送服务)

1 应用内支付 开发步骤 步骤一&#xff1a;判断当前登录的华为账号所在服务地是否支持应用内支付 在使用应用内支付之前&#xff0c;您的应用需要向IAP Kit发送queryEnvironmentStatus请求&#xff0c;以此判断用户当前登录的华为帐号所在的服务地是否在IAP Kit支持结算的国…...

springboot中使用mongodb完成评论功能

pom文件中引入 <!-- mongodb --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> yml中配置连接 data:mongodb:uri: mongodb://admin:1234561…...

南京仁品耳鼻喉专科医院:12月启动公益义诊月

专业医疗资源送至“家门口”&#xff01;南京仁品耳鼻喉专科医院启动公益义诊月 随着2024年即将步入尾声&#xff0c;南京仁品耳鼻喉医院为回馈社会&#xff0c;提升公众健康福祉&#xff0c;将于12月隆重推出“三甲专家公益义诊月”活动。此次活动旨在通过汇聚众多耳鼻喉领域…...

微信小程序首页搜索框的实现教程

微信小程序首页搜索框的实现教程 前言 在现代移动应用中,搜索功能是用户获取信息的主要方式之一。对于购物小程序而言,提供一个美观且高效的搜索框,可以显著提升用户体验,帮助用户快速找到他们想要的商品。本文将详细介绍如何在微信小程序中实现一个样式优美的搜索框,包…...

Educational Codeforces Round 151 (Rated for Div. 2)

题目链接 B. Come Together 题意 输入 输出 思路 可以将B、C坐标作A的变换&#xff0c;将A平移至原点&#xff0c;然后分情况讨论: B、C两点都在轴上&#xff0c;具体分为同向轴和其他情况B、C两点都在象限中&#xff0c;具体分为相同象限、对角象限和相邻象限分别位于象限…...

第二十一天 深度学习简介

深度学习&#xff08;Deep Learning&#xff0c;简称DL&#xff09;是机器学习的一个分支&#xff0c;它通过构建和训练深层神经网络模型&#xff0c;从数据中学习和提取特征&#xff0c;以实现复杂任务的自动化处理和决策。以下是对深度学习的详细介绍&#xff1a; 一、起源与…...

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

随笔 从千万粉丝“何同学”抄袭开源项目说起&#xff0c;为何纯技术死路一条&#xff1f; 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 我们的系统应该配置哪些监控报警项&#xff1f; 监控报警系统如何实现自监控? java 老矣&#xff0c;尚能饭否&#xff…...

elementUI如何dialog对话框 不设置 点击遮罩层 自动关闭的功能

背景 用户在填写dialog对话框的时候&#xff0c;有时候误触 遮罩层&#xff0c;导致form表单直接关闭&#xff0c;用户的信息丢失 代码 要使对话框在点击遮罩层时关闭&#xff0c;您需要在 el-dialog 组件上将 close-on-click-modal 属性设置为 false。以下是更新后的代码&…...

循环神经网络:从基础到应用的深度解析

&#x1f35b;循环神经网络&#xff08;RNN&#xff09;概述 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络&#xff0c;RNN具有内存单元&#xff0c;能够捕捉序列中前后信息…...

LeetCode 100.相同的树

题目&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 思路&#xff1a;灵神 代码&#xff1a; class Solution {public boolean…...

序列化与反序列化

序列化是将对象转换为可被存储或传输的格式&#xff0c;例如将对象转换为字节流或字符串。序列化的过程可以将对象的状态保存下来&#xff0c;以便在需要时可以重新创建对象。 反序列化则是将序列化的对象转换回原始的对象形式&#xff0c;以便可以使用和操作这些对象。 序列…...

spring boot打包fat jar

所谓fat jar就是包含所有依赖的jar以及其他开发的代码的jar包。可以通过java -jar xxx.jar直接启动运行&#xff0c;不需要部署到tomcat中间件就能运行。 接下来我们使用maven进行打包&#xff1a; &#xff08;1&#xff09;在需要带包的主模块的pom中添加build依赖&#xf…...

2021年美亚杯电子数据取证大赛-个人赛

资格赛-案件背景 2021年10月某日早上&#xff0c;本市一个名为"大路建设"的高速公路工地主管发现办公室的计算机被加密并无法开启&#xff0c;其后收到了勒索通知。考虑到高速公路的基建安全&#xff0c;主管决定报警。警方调查人员到达现场取证&#xff0c;发现办公…...

用 React 编写一个笔记应用程序

这篇文章会教大家用 React 编写一个笔记应用程序。用户可以创建、编辑、和切换 Markdown 笔记。 1. nanoid nanoid 是一个轻量级和安全的唯一字符串ID生成器&#xff0c;常用于JavaScript环境中生成随机、唯一的字符串ID&#xff0c;如数据库主键、会话ID、文件名等场景。 …...

泛型擦除是什么?

泛型擦除(Type Erasure)是Java编译器在编译泛型代码时的一种机制&#xff0c;它的目的是确保泛型能够与JAVA的旧版本(即不支持泛型的版本)兼容。泛型擦除会在编译时移除泛型类型信息&#xff0c;并将泛型类型替换为其非泛型的上限类型(通常是Object) 详细解释 在Java中&#…...

鸿蒙Next星河版基础代码

目录&#xff1a; 1、鸿蒙箭头函数的写法2、鸿蒙数据类型的定义3、枚举的定义以及使用4、position绝对定位及层级zIndex5、字符串的拼接转换以及数据的处理(1)字符串转数字(2)数字转字符串(3)布尔值转换情况(4)数组的增删改查 6、三元表达式7、鸿蒙for循环的几种写法7.1、基本用…...

物联网智能项目:智能家居系统的设计与实现

物联网(Internet of Things,IoT)技术正在迅速改变我们的生活方式,特别是在智能家居、工业自动化、环境监控等领域。物联网智能项目通过将设备、传感器、控制器等通过互联网连接,实现设备间的智能交互,带来高效、便捷和智能的体验。本文将介绍一个典型的物联网智能家居项目…...

STL算法之set相关算法

STL一共提供了四种与set(集合)相关的算法&#xff0c;分别是并集(union)、交集(intersection)、差集(difference)、对称差集(symmetric difference)。 目录 set_union set_itersection set_difference set_symmetric_difference 所谓set&#xff0c;可细分为数学上定义的和…...

STM32主要功能

STM32 是由意法半导体&#xff08;STMicroelectronics&#xff09;推出的一系列基于 ARM Cortex-M 内核的微控制器&#xff08;MCU&#xff09;。STM32 微控制器广泛应用于嵌入式系统中&#xff0c;因其高性能、低功耗、丰富的外设接口和多种封装形式而被广泛采用。其主要功能和…...

【数据结构】--ArrayList与顺序表

文章目录 1. 线性表2. 顺序表3. ArrayList简介4. MyArrayList的实现5. ArrayList使用5.1 ArrayList的构造5.2 ArrayList常见操作5.3 ArrayList的遍历5.4 ArrayList的扩容机制 6. ArrayList的具体使用6.1 简单的洗牌算法6.2 杨辉三角 1. 线性表 线性表&#xff08;linear list&…...

多线程篇-3--java内存模型(主内存,共享内存,三大特性,指定重排)

Java内存模型 Java Memory Model&#xff0c;简称JMM&#xff0c;本身是一种抽象的概念&#xff0c;实际上并不存在&#xff0c;它描述的是一组规范&#xff0c;通过这组规范定义了程序中各个变量&#xff08;包括实例字段&#xff0c;静态字段和构成数组对象的元素&#xff0…...

Android Studio的AI工具插件使用介绍

Android Studio的AI工具插件使用介绍 一、前言 Android Studio 的 AI 工具插件具有诸多重要作用&#xff0c;以下是一些常见的方面&#xff1a; 代码生成与自动补全 代码优化与重构 代码解读 学习与知识获取 智能搜索与资源推荐实际使用中可以添加注释&#xff0c;解读某段代…...

【Yarn Bug】 yarn 安装依赖出现的网络连接问题

最近&#xff0c;在初始化 Ant Design Pro 前端脚手架过程中&#xff0c;使用 yarn 安装依赖时遇到了网络连接问题&#xff0c;具体错误信息提示为 info There appears to be trouble with your network connection. Retrying...。通过百度查询&#xff0c;得知出现这种问题的原…...

Vue3的Setup语法动态获取Dom或调用子组件方法

官方文档&#xff1a;https://cn.vuejs.org/api/composition-api-setup.html#composition-api-setup 获取Dom <template><div class"todo" ref"todoDom" click"handleClick"></div> </template><script lang"t…...

中科院一区算法KO-K均值优化算法(K-means Optimizer)-附Matlab免费代码

首先&#xff0c;使用K-means算法在每次迭代中建立聚类区域的形心向量&#xff0c;然后KO提出两种移动策略&#xff0c;以在开发和探索能力之间建立平衡。每次迭代中探索或开发的移动策略的决定取决于一个参数&#xff0c;该参数将被设计为识别每个搜索代理是否在访问的区域中过…...

python数据可视化销量柱状图练习

需求&#xff1a; 假设某店铺的商品销量分为 线上销量 和 线下销量&#xff1a; 使用 叠加柱状图 分别显示线上和线下销量。 在柱状图中添加每种商品的总销量。 图表美观&#xff0c;包含图例、网格、颜色区分等。 代码实现&#xff1a; import matplotlib.pyplot as plt imp…...

甘特图全面指南:原理、制作与实际案例

甘特图&#xff08;Gantt Chart&#xff09;是一种用于项目管理的直观工具&#xff0c;以条形图的形式展示任务的时间进度和依赖关系。它通过简单明了的视觉效果帮助团队跟踪任务进展&#xff0c;分配资源并优化时间安排。本文将深入介绍甘特图的定义、制作方法&#xff0c;以及…...

如何创建 MySQL 数据库的副本 ?

MySQL 是一个广泛使用的开源数据库系统&#xff0c;它提供了多种数据库复制的方法。此功能对于确保跨不同环境的数据可用性和完整性至关重要。 管理 MySQL 数据库通常需要创建数据库的副本。这个任务被称为 MySQL 数据库复制&#xff0c;对于备份、测试、服务器迁移和其他关键…...

基于YOLO模型的目标检测与识别实现在ESP32-S3 EYE上全流程部署

前言 文章首发于 基于YOLO模型的目标检测与识别实现在ESP32-S3 EYE上全流程部署 文章目录 前言项目环境安装ESP-IDF安装开发环境运行环境 训练数据集准备添加自定义数据集 下载预训练模型训练 YOLO 模型模型量化和格式转换模型结果评估训练损失评估指标模型推理 模型部署部署环…...

2411C++,CXImage简单使用

介绍 CxImage是一个可非常简单快速的加载,保存,显示和转换图像的C类. 文件格式和链接的C库 Cximage对象基本上是加了一些成员变量来保存有用信息的一个位图: class CxImage{...protected:void* pDib; //包含标题,调色板,像素BITMAPINFOHEADER head; //标准头文件CXIMAGEINFO…...

Java对象与XML互相转换(xstream)

依赖 <dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.18</version></dependency> 实体类 package com.itheima.util;import lombok.AllArgsConstructor; import lom…...

计算机视觉工程师紧张学习中!

在当今这个日新月异的科技时代&#xff0c;计算机视觉作为人工智能的重要分支&#xff0c;正以前所未有的速度改变着我们的生活和工作方式。为了紧跟时代步伐&#xff0c;提升自我技能&#xff0c;一群怀揣梦想与热情的计算机视觉设计开发工程师们聚集在了本次线下培训活动中。…...

网关整合sentinel无法读取nacos配置问题分析

sentinel无法读取nacos配置问题分析 1.spring-cloud-gateway整合sentinel2.问题现象3.原因猜测4.源码分析4. 结语 最近公司需要上线一个集约项目&#xff0c;虽然为内网项目&#xff0c;但曾经有过内网被攻破&#xff0c;导致内部系统被攻击的案例&#xff0c;且集约系统同时在…...

速盾:高防 CDN 中高级缓存有什么用?

在高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;的服务体系里&#xff0c;高级缓存功能犹如一颗强大的 “性能优化引擎”&#xff0c;对于提升网站或应用的运行效率、减轻源站压力以及改善用户体验等诸多方面都发挥着极为关键的作用。 一…...

大数据期末笔记

第一章、大数据概述 人类的行为及产生的事件的一种记录称之为数据。 1、大数据时代的特征&#xff0c;并结合生活实例谈谈带来的影响。 &#xff08;一&#xff09;特征 1、Volume 规模性&#xff1a;数据量大。 2、Velocity高速性&#xff1a;处理速度快。数据的生成和响…...

Qt详解QUiLoader 动态加载UI文件

文章目录 详解 QUiLoader 模块的使用1. QUiLoader 简介1.1 应用场景 2. 准备工作2.1 添加模块依赖2.2 引入头文件 3. 使用 QUiLoader 加载界面3.1 示例代码form.uimain.cpp 4. 常用方法详解4.1 load函数原型作用参数返回值示例代码 4.2 createWidget函数原型作用参数返回值示例…...

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…...

云平台与阿里云服务器使用

云平台 云就是一堆远程计算机组成的集群。 计算就是各种软件服务。 云平台就是远程计算机集群提供的的各种服务所组成的远程服务平台。 云平台提供的服务主要可以分为三个类别&#xff1a; I 服务 P服务 S服务 i就是基础设施服务infrastructure p就是平台服务platform …...