Unity开发之C#基础-异常处理(Try Catch)

前言

其实本来这章应该将栈和队列的 但是后来想想 栈和队列在实际应用很少跟多的是大家了解一下栈和队列的基本常识比如先进先出的是谁后进先出的是谁这种 csdn有很多介绍栈和队列的文章 我觉得都比我理解深刻所以大家可以去搜索参照一下 今天我们继续往下讲解 如何自己主动的去处理异常 而不是等着系统提示我们出错 我们要学会未雨绸缪 主动的去捕捉错误 如果你在开发游戏的过程中遇到了错误 但是如果是系统报错程序就不会继续执行下去 那样游戏自己被迫卡死了 这样很不合理比如我们平时打游戏大家都多多少少遇到过比如以下这种:
在这里插入图片描述
这种情况就是程序员们未雨绸缪写出来的异常解决方式之一,但我们要知道的是 错误类型是分很多种的

制作不易还请各位一键三连哦!

文章目录

  • 前言
  • C#错误类型
  • 异常概述
    • 什么是异常?
    • 怎么来处理异常?
    • 不处理后果
    • try catch finally结构
    • try catch 原理
  • 异常对象的属性
  • 常见异常类型
  • throw 关键字
  • 总结

C#错误类型

  1. 语法错误:代码在程序编译期间,编译器报出的错误,即为语法错误
  2. 异常:代码在运行期间,可能使得程序非正常终止的错误,叫做异常
  3. 逻辑错误:程序可以正常运行,但是和预想的结果不同(这种bug太折磨人了看不见摸不到代码量上来的时候 得一点点去查)

异常概述

什么是异常?

异常就是程序中的运行时错误,当出现异常时,系统会捕获这个错误并抛出一个异常

怎么来处理异常?

  1. 在c#中,提供了异常处理结构(try catch finally)
  2. 用户可以根据需要编写自己的异常类和抛出异常

不处理后果

很简单 如果异常不经过处理 很可能会逼停程序 使程序默认终止


那么 说了这么多 我们来实际操作一下怎么处理异常:

try catch finally结构

try{
// 可能会发生异常的代码.... }
catch(异常类型 变量){
// 异常处理代码... }
catch(异常类型){
// 异常处理代码... }
... catch{
// 异常处理代码... }
finally{
// 总会最后执行的代码... }

那么 在程序中具体是什么样的呢 我们实践一下:
在这里插入图片描述
你看 我们这就很简单的自己捕捉到了异常 并且处理了它 倘若我们把这个异常比作是一个别的呢 比如网络断开链接 充值失败等等 是不是应该告诉用户 应该做什么而不是逼停自己的游戏程序
那么 这个原理是什么呢?

try catch 原理

• 我们把有可能发生异常的代码放在try语句块中
• 如果发生异常,则根据异常类型来与后面的多个catch后的类型进行比较
• 如果相同,则执行catch语句块中的内容
• 如子类的异常都不相同,则会执行父类catch{…}内容
• 执行一个catch结构后就不会在执行其他catch
• 最后执行finally。

异常对象的属性

  1. Message:异常的描述信息
  2. Stack Trace:描述异常发生的位置 (当catch捕捉到一个异常对象,可打印其异常信息 或者直接定位到其位置也可以方便我们查找)

常见异常类型

在这里插入图片描述
那么 我们既然可以捕捉并且处理异常 是不是也可以自己抛出一个异常等待别的地方处理呢? 当然可以啦 下面我们介绍抛出异常:

throw 关键字

我们可以自己尝试产生一个异常

  1. 创建一个异常示例
  2. 用Throw将其抛出
  3. 可以在调用层使用try catch处理

我们可以自己实验一下:
创建两个类 Class1,Class2 代码如下:
在这里插入图片描述
在这里插入图片描述
其实在之后我们写代码时 try catch和if一样 可以有很多的catch 我们可能会自己继承异常类 然后自己封装一个可能会出现的各种异常的类 然后在别的类里调用他们 而不是每一个地方都要去自己捕捉异常处理 可能会统一处理很多异常。
在这里插入图片描述


总结

异常的处理其实一般会在框架中封装广泛 大家以后学习会慢慢了解到的 基本的c#基础知识大家马上就要了解完了 后面还有两三章就会讲解完毕 然后开始unity的讲解使用 同学们可以多多做c#的练习题巩固一下之前的知识,下期见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194303.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SystemVerilog学习 (9)——随机化

目录 一、概述 二、随机化 2.1、如何简单地产生一个随机数 2.1.1 利用系统函数产生随机数 2.1.2 urandom() 2.2、什么需要随机化 2.3、随机约束 2.3.1 rand 和 randc 2.3.2 随机约束的使用 2.3.3 约束块 三、总结 一、概述 随着设计变得越来越大,要产生一个完整的激…

opencv车牌识别<二>

目录 一、车牌识别算法流程 二、车牌检测 一、车牌识别算法流程 在解释ANPR代码之前,需要明白主要步骤和使用ANPR 算法的任务。ANPR 有两个主要步骤:车牌检测和车牌识别。车牌检测的目的是在整个视频帧中检测到车牌位置。当在图像中检测到车牌时,分割的…

Qt图形视图框架:QGraphicsItem详解

Qt图形视图框架:QGraphicsItem详解 Chapter1 Qt图形视图框架:QGraphicsItem详解Chapter2 自定义QGraphicsItem实现平移、改变尺寸和旋转1. 平移2. 改变尺寸3. 旋转完整代码如下:头文件源文件 Chapter1 Qt图形视图框架:QGraphicsIt…

雷欧REO控制器维修REOVIB MFS268 M DP24

REO雷欧控制器维修常见型号包括: MFS268, MTS442, MTS443, MFR100/200, MFS158,MFS168等 涉及双层线圈层间短路的修理:振动控制器维修,双层线圈在上下层间发生层间短路,是由于层间材质不好或嵌…

【云原生-Kurbernets篇】Kurbernets集群的调度策略

调度 一、Kurbernetes的list-watch机制1.1 list-watch机制简介1.2 创建pod的流程(结合list-watch机制) 二、Scheduler的调度策略2.1 简介2.2 预选策略(predicate)2.3 优选策略(priorities) 三、标签管理3.1…

C# Onnx LSTR 基于Transformer的端到端实时车道线检测

目录 效果 模型信息 项目 代码 下载 效果 端到端实时车道线检测 模型信息 lstr_360x640.onnx Inputs ------------------------- name:input_rgb tensor:Float[1, 3, 360, 640] name:input_mask tensor:Float[1, 1, 360, …

Windows10电脑没有微软商店的解决方法

在Windows10电脑中用户可以打开微软商店,下载自己需要的应用程序。但是,有用户反映自己Windows10电脑上没有微软商店,但是不清楚具体的解决方法,接下来小编给大家详细介绍关于解决Windows10电脑内微软商店不见了的方法&#xff0c…

智慧化城市内涝的预警,万宾科技内涝积水监测仪

随着城市化进程的加速,伴随的是城市内涝问题日益凸显。频繁的暴雨和积水给市民的生活带来了诸多不便,也给城市的基础设施带来了巨大压力。如何解决这一问题,成为智慧城市建设的重要课题和政府管理的工作主题,只要内涝问题得到缓解…

Redis键(Keys)

前言 在 Redis 中,键(Keys)是非常重要的概念,它们代表了存储在数据库中的数据的标识符。对键的有效管理和操作是使用 Redis 数据库的关键一环,它直接影响到数据的存取效率、系统的稳定性和开发的便利性。 本文将深入…

腾讯云轻量服务器购买优惠,腾讯云轻量应用服务器优惠购买方法

你是否曾经为如何选择合适的服务器而苦恼?在互联网的海洋中,如何找到一个性价比高,性能稳定,价格合理的服务器供应商,确实是一个让人头疼的问题。今天,我要向你介绍的,是腾讯云轻量应用服务器的…

Visual Studio Code配置c/c++环境

Visual Studio Code配置c/c环境 1.创建项目目录2.vscode打开项目目录3.项目中添加文件4.文件内容5.配置编译器6.配置构建任务7.配置调试设置 1.创建项目目录 d:\>mkdir d:\c语言项目\test012.vscode打开项目目录 3.项目中添加文件 4.文件内容 #include <iostream> u…

YOLOv5项目实战(3)— 如何批量命名数据集中的图片

前言:Hello大家好,我是小哥谈。本节课就教大家如何去批量命名数据集中的图片,希望大家学习之后可以有所收获!~🌈 前期回顾: YOLOv5项目实战(1)— 如何去训练模型 YOLOv5项目实战(2࿰

MIB 6.1810实验Xv6 and Unix utilities(2)sleep

难度:easy Implement a user-level sleep program for xv6, along the lines of the UNIX sleep command. Your sleep should pause for a user-specified number of ticks. A tick is a notion of time defined by the xv6 kernel, namely the time between two interrupts f…

【Nginx】使用nginx进行反向代理与负载均衡

使用场景 反向代理&#xff1a;一个网站由许多服务器承载的&#xff0c;网站只暴露一个域名&#xff0c;那么这个域名指向一个代理服务器ip&#xff0c;然后由这台代理服务器转发请求到网站负载的多台服务器中的一台处理。这就需要用到Nginx的反向代理实现了 负载均衡&#xf…

AWD比赛中的一些防护思路技巧

## 思路1&#xff1a; 1、改服务器密码 &#xff08;1&#xff09;linux&#xff1a;passwd &#xff08;2&#xff09;如果是root删除可登录用户&#xff1a;cat /etc/passwd | grep bash userdel -r 用户名 &#xff08;3&#xff09;mysql&#xff1a;update mysql.user set…

【1567.乘积为正数的最长子数组长度】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int getMaxLen(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]nums[0]>0?1:0;g[0]nums[0]<0?1:0…

Golang实现一个一维结构体,根据某个字段排序

package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {// 创建一个一维结构体切片people : []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},{"David", 35},{"Eve…

MHA实验和架构

什么是MHA&#xff1f; masterhight availabulity&#xff1a;基于主库的高可用环境下可以实现主从复制、故障切换 MHA的主从架构最少要一主两从 MHA的出现是为了解决MySQL的单点故障问题。一旦主库崩溃&#xff0c;MHA可以在0-30秒内自动完成故障切换。 MHA的数据流向和工…

Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap,Kotlin

Android BitmapFactory.decodeResource读取原始图片装载成原始宽高Bitmap&#xff0c;Kotlin fun getOriginalBitmap(resId: Int): Bitmap {val options BitmapFactory.Options()options.inJustDecodeBounds true //只解析原始图片的宽高&#xff0c;不decode原始文件装载到内…

​软考-高级-系统架构设计师教程(清华第2版)【第5章 软件工程基础知识(190~233)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第5章 软件工程基础知识&#xff08;190~233&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图