欢迎来到天天文库
浏览记录
ID:51959600
大小:605.00 KB
页数:43页
时间:2020-03-26
《异常错误处理中的安全概述.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、第四章异常/错误处理中的安全异常/错误处理是程序设计中的常见内容,异常/错误处理的技巧和程序的安全性有着密切的关系。科学的异常/错误处理方法,是系统安全性的重要保障。一般说来,程序开发过程中可能出现的问题有如下几种:编译错误:程序语法写错了,比如在C++中,inta写成了Inta,这种错误,编译器能够进行提示,一般比较容易解决。运行错误:程序语法没有问题,但是在运行的时候发生了问题。比如连接数据库代码本来是正确的,但是运行的时候数据库突然断电,程序不能正常运行,这是在代码编写阶段应该预计到的,可以由
2、异常处理解决(Java语言中定义了Error和Exception,都是为了解决此类问题);在某些语言(如VB)中,没有面向对象的异常处理机制,此时设计了面向过程的错误处理方法来解决这个问题。另外一种是逻辑错误,程序语法没有问题,也没有异常,但是就是得不到正确的结果,这需要靠程序员非常高超的编程经验来进行处理;这不属于本章研究的范围。本章主要针对异常和错误处理中的安全问题进行讲述,首先基于面向对象语言,讲解异常的基本机制,然后讲解异常的捕获和处理中的安全,最后针对面向过程的错误处理方法来阐述安全问题。
3、4.1异常/错误的基本机制4.1.1异常的出现如前所述,异常主要是针对程序语法没有问题时,在运行的过程中出现的突发情况。本节将用一个例子,来描述异常的出现。以Java语言为例,如下代码的主要作用是让用户输入一个数字,显示其平方,代码如P04_01.java。运行这个程序,按照正常输入“12”,能够打印正确结果。但是,用户的输入是不可预计的。如果用户不小心输入一个无法转换成数值的字符串,如“12o”,结果如下:界面上没有出现结果,而是打印了一堆莫名其妙的东西。如果这个程序给用户使用,用户会觉得莫名其妙
4、,也就是说这里没有给用户一个较为友好的界面,至少应该提示用户格式输错了;更进一步说,这种问题如果事先不能预见并且认真处理,严重的情况下甚至会造成系统运行的不正常。从以上的程序可以看出,异常的出现,是在程序编译通过的情况下,程序运行过程中出现一些突发情况造成的,这些突发情况,需要有良好的预见性,预先进行处理,以保证系统的安全性;这就对程序员提出了更高的要求。实际上,要预见程序可能出现的所有异常,几乎是不可能的。常见异常可能出现的场合如:访问数据库时,数据库停止工作;访问文件,文件恰好在被另一个程序访问
5、;输入一个以0当除数的数值;类型转换,对象未分配内存;等等。从上面可能出现异常的场合可以看出,异常是几乎所有高级语言都可能出现的情况,在面向对象的语言里面,C++、C#等也会出现类似的情况,包括一些非面向对象的语言,如VB,也必须要面对程序运行过程中的异常现象。虽然处理方法不同,但本质类似。提示值得一提的是,异常和错误实际上在不同的语言中,有不同的说法。一般说来,异常叫做Exception,错误叫做Error。Java中定义了Exception和Error,来处理异常和错误,本章主要是针对Excep
6、tion进行讲解;VB中主要处理的对象是Error,实际上和Java中的Exception更加类似,只是说法不同。4.1.2异常的基本特点从上节的程序可以看出,从控制台的打印来看,程序在底层有一个提示:java.lang.NumberFormatException,意思是说出现了一个异常,并且显示了异常出现的位置在第11行:无法将字符串转换为数值。该处,异常类型为:java.lang.NumberFormatException。可以查看文档,找到该类,在文档中非常详细地说明了该异常出现的原因:翻译成
7、中文是:当试图将一个不符合数值格式的字符串转成数值时,程序抛出该类异常。doublenumber=Double.parseDouble(str);提示:不管什么语言的初学者,一看到程序抛出异常就非常畏惧,这很正常。不过,如果在测试的过程中,程序出现异常信息,有时候可以成为排错的良好手段。一般情况下,此时可以首先查看异常种类,根据文档查询该种异常出现的原因;然后查看异常消息和异常出现的地点,可以顺利地解决编程中出现的问题。当系统底层出现异常,实际上是将异常用一个对象包装起来,传给调用方(客户端),俗称
8、抛出(throw)。比如在这个程序里面,发生了数字格式异常,这个异常在底层就被包装成为java.lang.NumberFormatException的对象抛出。异常对象抛出给谁呢?抛出给函数的调用者;如果调用者具有对异常处理的代码,则将异常进行处理;否则将异常继续向前抛出;如果直到用户端还没有对异常进行处理,异常将会在标准输出(如控制台)上打印。对于非面向对象语言,异常出现的原理类似。程序中可能出现的异常有很多种类,如:?算术异常,如除数为0;?数组越界异常;?类型转
此文档下载收益归作者所有