安全编程之异常处理
最近在上有关安全编程的课程,整理一些课上笔记外加一些自己测试的东西写成学习博客,希望大家共同进步。
关于异常,大家早已熟知,那么异常是如何来的呢?
异常的起源
异常的起源据说是这样的。。。
相信大家都写过左边这样的代码:
int function(int a){ Object function(int a){
if(a>0||a<10){ if(a>0||a<10){
return 1; return a;
} }
return 0; return "范围错误";
} }
想当年的大牛想编写一个判断某个数是否在1-10这个范围内的函数,和左边不同的是如果范围正确,返回该数值,否则返回---“范围错误”。上面这个函数的返回值结果是int型的,但大牛的返回值结果既可能是int型也可能是一串字符,如果我们其他函数要用到这个结果,这种处理方式显然很不方便,于是大牛创造了异常。上面其实说的就是一个关于返回值的问题,遇到异常信息我们该怎么办。一句话:
一:避免用返回值存储异常信息,而采用Exception来包装异常。
int function(int a) throws Exception{
if(a<0||a>10){
throw new Exception("范围错误");
}
else
return a;
}
异常在函数之间是怎么传递的呢。。。。很简单,即异常的抛出以及捕获。。。某个函数如果产生某个异常,可以将其抛出,其他函数可以捕获。。。遇到某个可能抛出异常的函数fun()我们先善待try{fun()},不行之后就catch(Exception e);
int function(int a) throws Exception {
if (a < 0 || a > 10) {
throw new Exception("范围错误");
} else
return a;
}
void f() {
try {
function(80);
} catch (Exception e) {
e.printStackTrace();
}
}
当然,使用异常是需要一定代价的,不用说也知道,肯定是性能降低了。。。
当我们需要某段代码必须执行的时候,就可以用到finally,这样不管异常怎么阻碍或者其他某种原因,其中的代码总会执行。即在try,catch后面加上finally{}。
二:必须要执行的代码,一定要写在finally中才安全。
既然异常可以增加我们编程的安全性,那么
三:科学的使用自定义异常。
就像程序遇到bug突然崩溃要提交这个bug一样,根据异常我们可以将程序遇到的某个错误记录下来,这时候我们可以自定义一个异常。
public class CException extends Exception{
//日期和数值属性
Date time;
int num;
//属性的set和get方法
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public Date getTime() {
return time;
}
public void setTime(Date date) {
this.time = date;
}
}
然后我们在编写代码的时候可以抛出这个异常:
// 异常产地
int cal(int a) throws CException {
// GregorianCalendar的实例来找到执行的时间
GregorianCalendar cal = new GregorianCalendar();
if (a > 10 || a < 0) {
CException ce = new CException();
ce.setTime(cal.getTime());// 设置异常中的time属性
ce.setNum(a);// 设置异常中的num属性
throw ce;// 抛出异常
} else
return a;
}
void f() {
try {
cal(100);
} catch (CException ce) {// 捕获异常
System.out.println("在" + ce.getTime() + "這一時刻輸入了數字" + ce.getNum()+"遇到了异常");
}
}
结果如下:
在Tue May 07 20:37:38 CST 2013這一時刻輸入了數字100遇到了异常
有时候我们会遇到大量的异常,而且很多异常都是重复出现的,这个时候我们就可以将他们统统包括在Exception中抛出,然后统一解决。即
四:使用异常的集中处理
下面我定义了一个异常处理方法的类ExceptionHandle
//处理异常的类
public class ExceptionHandle{
//假设有两种异常情况
public static void Handle(Exception e){
if(e instanceof CException){
System.out.println("我是CException的处理方法");
}
if(e instanceof IOException){
System.out.println("我是IOException的处理方法");
}
}
}
遇到异常要处理时。
void f() {
try {
cal(100);
} catch (CException ce) {// 捕获异常
ExceptionHandle.Handle(ce);
}
}
结果:我是CException的处理方法
这样集中处理异常可以解决一些问题,如程序的条理性以及可读性等等,又例如A君写的程序已经上市,如果其中出现了某些问题异常问题,采用异常集中处理,可以直接写个配置文件补丁,就可以不更改已经写好的源程序。文艺一点就是使程序具有了更好的兼容性?(这是我瞎猜的。。。)。同时也更安全。
目前就整理笔记列出来四点,知识点比较简单,如有错误之处,请不吝赐教。。。
分享到:
相关推荐
异常处理是编程中的一种机制,用于捕获和处理运行时发生的错误或异常情况。异常可以由硬件引发,如硬件异常,也可以由操作系统或应用程序自身触发,即软件异常。当异常发生时,操作系统允许程序有机会检查异常类型并...
在这个论文中,我们将深入探讨Java编程中的异常处理方法和技巧,帮助开发人员在程序设计中更好地使用异常处理机制,提高程序的健壮性、可靠性和安全性。 本文的结构如下: 1. Java异常处理机制 2. 异常类 3. 抛出...
Java编程中的异常处理是编程实践中不可或缺的一部分,它关乎程序的健壮性和稳定性。本文主要讨论了Java异常处理的三个层次:好、不好和恶劣的处理方式,并提供了相关的处理技巧。 首先,我们需要理解Java异常的基本...
《安全编程之道》是一本专注于C和C++编程语言的安全编程指南,旨在帮助开发者提升代码质量和安全性,防止软件漏洞导致的潜在威胁。本书基于“program secure”理念,深入探讨了如何在开发过程中实施最佳安全实践。 ...
安全编程技术》是一本图书,全书共分为16章,针对安全编程技术进行讲解,主要涵盖了基本安全编程、应用安全编程、数据保护编程以及其他内容共四大部分:第一部分包含内存安全、线程/进程安全、异常/错误处理安全、...
异常处理的编程应用不仅限于定位和修复崩溃问题,还包括预定义的异常类型(如`std::exception`)、异常安全编程(确保在异常发生时资源得到正确释放)、以及使用try-catch-finally块来控制异常的传播和清理工作。...
《寒江独钓--Windows内核安全编程》是一份深入探讨Windows操作系统内核安全编程的珍贵资源,由知名技术专家“寒江独钓”编著。这份资料包含了丰富的Windows内核驱动开发实例,覆盖了从磁盘驱动、文件系统驱动到网络...
通过以上内容,我们可以看到C++异常处理是如何帮助程序员编写更加安全、健壮和易于维护的代码的。了解并熟练掌握异常处理的技巧,对于提高代码质量和可靠性具有重要意义。阿愚的故事就是一个程序员与异常处理编程...
编写安全实用的程序是每个编程人员的始终追求,面向对象程序设计语言提供了高级异常处理机制,可以确保程序从可能发生的错误中恢复过来,而且可以保证数据或资源不丢失。介绍了异常处理的概念、原则、工作原理以及异常...
6. **异常处理**:学习如何正确处理硬件和软件异常,包括页面错误、调试异常等,确保系统能够优雅地处理错误并恢复。 7. **安全编程实践**:遵循编码最佳实践,如使用安全函数替代易出错的旧函数,对输入进行充分...
"异常处理"则是编程中用于捕获和处理运行时错误的重要机制,它能够确保程序在遇到问题时不会突然崩溃。 在标题提到的"易语言HOOK异常处理"中,我们关注的是如何在易语言中实现对系统或应用程序的钩子,并在发生异常...
《Windows内核安全编程》是深入探讨Windows操作系统内核安全机制的一份宝贵资源。源码的提供使得读者能够更直观地理解理论知识,并通过实践来加强理解。在Windows内核安全编程领域,开发者需要掌握一系列关键概念和...
- **异常处理**:合理处理异常情况,避免程序崩溃或泄露敏感信息。 - **日志记录**:适当记录操作日志,以便于安全审计和故障排查。 #### 六、结论 《信息安全技术应用软件安全编程指南》为软件开发者提供了一套...
总的来说,C语言的异常处理更依赖于操作系统,主要用于硬件级别的异常,而C++的异常处理是语言内置的,更适用于逻辑错误和异常安全编程。在实际开发中,理解这两种机制的区别对于编写健壮的程序至关重要。
《Windows内核安全编程》是一本深入探讨Windows操作系统内核层面安全问题的专业书籍。试读内容涵盖前三章,虽然不完整,但足以让我们对Windows内核安全编程的基础知识有所了解。下面将根据这些章节的内容,详细阐述...
在易语言中,SEH(Structured Exception Handling)异常处理机制是用于处理程序运行时可能出现的错误或异常情况的重要工具。本文将详细讲解易语言中的SEH异常处理,以及相关的关键技术点。 SEH是微软Windows操作...
《华为C&C++语言安全编程规范》是华为公司制定的一套详细且严谨的编程准则,旨在提高软件开发过程中的安全性,防止因编程错误导致的安全漏洞。这套规范基于C和C++语言,对于这两种广泛使用的系统级编程语言提出了...
七、异常安全编程 为了编写更健壮的代码,开发者应遵循异常安全原则,确保即使在异常发生时,程序也能保持一致的状态。这包括使用异常安全的函数、对象和设计模式,如资源获取即初始化(RAII)和智能指针。 总结,...
Java语言安全编程规范是开发高质量、健壮且安全的软件应用程序的基础。在Java中,安全性不仅涉及代码的正确性,还包括防止恶意攻击、数据保护以及遵循最佳实践来降低潜在的安全风险。以下是一些核心的Java安全编程...