闲话闲说——关于异常

前几天,公司的一个漂亮MM下午的时候突然脚就痛了,然后问她什么回事,她说她自己也不知道是为什么,脱了鞋一看,应该是纽到脚了,肿得很厉害。世界上的很多事情都是这样,你不去注意,不去想,它们几乎都是那样的熟悉,那样的一般,那样的正常。但是如果我们仔细的想想,或许就能悟出很多的道理来。假如我们的手被东西给割破了,流血了,我们就马上知道疼痛了,在大多数人眼中疼痛似乎不是个好东西。要是我们不会疼痛会不会很爽呢?答案是否定的。如果我们的手被割破了,我们不知道疼痛,那么我们就不会马上进行处理,结果肯定是出血过多而出现生命危险。我们有理由相信曾经有这样生物,受伤后却不没有知觉,终于经过漫长的自然选择,这些生物不存在了。所以,今天能看到这篇文章的人都是知道疼痛的。

上面的闲话说了这么多,我们现在进入正题。假如你的程序也如那些没有知觉的人一样,结果会怎样呢。不能否认程序在运行中一定会出现异常,如果程序出现了异常,我们却丝毫不能觉察到,时间一久,里面的数据的完整性一定会遭到破坏。很多新手,很怕异常,于是来个了很大的Try,然后catch下,里面什么都不做。这种做法很不推荐,既然捕获了异常,就要对它进行适当的处理。有异常出现,就说明程序在运行中出现了技术上的或者业务上的错误。异常的意图是让你知道发生了错误,而不是让你难堪。

来看段常见的代码:
                int test = 0;
                int result = 9 / test;
运行后出现异常:试图除以零。好丢人啊!改下

None.gif              try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
int test = 0;
InBlock.gif                
int result = 9 / test;
ExpandedBlockEnd.gif            }

None.gif            
catch
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
ExpandedBlockEnd.gif            }
别人看不到异常了。可是事实上我们程序确实出现了异常,我们不能自欺欺人。
None.gif try
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
int test = 0;
InBlock.gif                
int result = 9 / test;
ExpandedBlockEnd.gif            }

None.gif            
catch  (System.DivideByZeroException ex)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
throw new DemoException(123"用户试图输入被除数'0',进行除法运算");//重新包装,冒泡
ExpandedBlockEnd.gif
            }

None.gif            cath(DemoException ex)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif                 
//假设这个异常我们能处理,就在这里直接处理了   
ExpandedBlockEnd.gif
            }

None.gif            
catch  (Exception ex)
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif                
throw new DomoException(000,ex);
ExpandedBlockEnd.gif            }
不但我们要善于利用.net的异常,也要学会自己产生异常。如:
None.gif publi  int  Age
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif  
getdot.gif{return _Age;}
InBlock.gif  
set
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif  
if(value<0)
InBlock.gif    _Age
=0;
InBlock.gif  
if(value>55)
InBlock.gif    
throw new InputEmployeeException("年龄已经超过退休年龄");
InBlock.gif  _Age
=value;
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}
说到异常,很多人都知道要把异常log起来。主要原因就是屏蔽这些技术,让客户看到友好的提示,而将这些异常留给我们,以便我们更好的重构或者维护我们的程序。

转载于:https://www.cnblogs.com/Linjianyu/archive/2008/04/26/1172623.html

在电子设计自动化(EDA)领域,Verilog HDL 是一种重要的硬件描述语言,广泛应用于数字系统的设计,尤其是在嵌入式系统、FPGA 设计以及数字电路教学中。本文将探讨如何利用 Verilog HDL 实现一个 16×16 点阵字符显示功能。16×16 点阵显示器由 16 行和 16 列的像素组成,共需 256 个二进制位来控制每个像素的亮灭,常用于简单字符或图形显示。 要实现这一功能,首先需要掌握基本的逻辑门(如与门、或门、非门、与非门、或非门等)和组合逻辑电路,以及寄存器和计数器等时序逻辑电路。设计的核心是构建一个模块,该模块接收字符输入(如 ASCII 码),将其转换为 16×16 的二进制位流,进而驱动点阵的 LED 灯。具体而言,该模块包含以下部分:一是输入接口,通常为 8 位的 ASCII 码输入,用于指定要显示的字符;二是内部存储,用于存储字符对应的 16×16 点阵数据,可采用寄存器或分布式 RAM 实现;三是行列驱动逻辑,将点阵数据转换为驱动 LED 矩阵的信号,包含 16 个行输出线和 16 个列使能信号,按特定顺序选通点亮对应 LED;四是时序控制,通过计数器逐行扫描,按顺序控制每行点亮;五是复用逻辑(可选),若点阵支持多颜色或亮度等级,则需额外逻辑控制像素状态。 设计过程中,需用 Verilog 代码描述上述逻辑,并借助仿真工具验证功能,确保能正确将输入字符转换为点阵显示。之后将设计综合到目标 FPGA 架构,通过配置 FPGA 实现硬件功能。实际项目中,“led_lattice”文件可能包含 Verilog 源代码、测试平台文件、配置文件及仿真结果。其中,测试平台用于模拟输入、检查输出,验证设计正确性。掌握 Verilog HDL 实现 16×16 点阵字符显示,涉及硬件描述语言基础、数字逻辑设计、字符编码和 FPGA 编程等多方面知识,是学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值