金家寶 写道
异常、断言和线程
异常
虽然大多数程序员都在致力于编写没有漏洞、不容易崩溃的程序,但这样的愿望并不存在。现实中,有很多的问题会在程序中发生。当然,java给我们提供了比较完整的异常处理机制,但即便这样,我们仍有可能需要自己去编写错误类来定义适应特定情况出现的错误,其方法也很简单,即继承Throwable类(或它的子类)。
异常类有两种,他们分别继承了Throwable(所有异常类的超类),他们是Error、Exception类,前者多由于虚拟机内部错误所引起,所以对于我们来说,我们不需要考虑如何处理Error,但Error往往是致命的。这个类旨在Java需要时能够使用他们。至于Exception类,它又可分为两种,一种为运行阶段异常(RuntimeException及其子类),一种是其他异常。
在继承环境中,子类可以继承父类抛出异常的方法,并抛出父类异常及其子类,或者干脆不抛出异常。
在try..catch..语句中,可以嵌套,但catch的所有异常如有继承关系,并且超类来列在子类异常的前面的话,这样超类将永远不会被执行。
虽然在方法或类后面标注throws就意味着需要在调用此方法的时候用try catch,但三者之间仍然可以使用嵌套,例如如下技术的写法
public void readMessage() throws IOException {
MessageReader mr = new MessageReader();
try {
mr.loadHeader();
} catch (IOException e) {
//do something
throw e;
}
}
虽然异常给了我们很好的处理一些问题的方法,但异常本身处理是非常耗费资源的。所以,异常 并不是我们最好的处理一些问题的方法,而是在可以预计并避免的地方,用简单的测试或者检验语句来避免过度的滥用异常,这将也成为优化系统的一个好办法。
分享到:
相关推荐
线程异常SEHHook通常涉及到对这一机制的利用或篡改,以便在多线程环境中更有效地管理和捕获异常。 在Windows系统中,异常处理分为两个层次:硬件异常和软件异常。硬件异常通常由CPU检测到,如内存访问错误;而软件...
JUnit提供注解(如@Test)来标记测试方法,断言(如assertEquals)来验证预期结果,以及异常处理等功能。随着版本的更新,JUnit还引入了参数化测试、类别测试、假设测试等高级特性,增强了测试的灵活性和覆盖率。 ...
2. **Junit4.8**:JUnit4.8是一个针对Java的单元测试框架,它的主要特性包括注解(@Test)、参数化测试、异常断言等。在测试多线程程序时,JUnit4.8可以帮助我们编写线程安全的测试用例,确保每个线程的行为都符合...
在多线程应用中,确保异常的记录和处理策略,尤其是在“fire and forget”模式下。 5. **记录异常信息**:捕获异常时,使用日志记录工具(如log4net、EIF、Event Log、TraceListeners或文本文件)记录异常,确保...
MFC提供了`AfxThrowException`来抛出异常,以及`ASSERT`宏进行断言检查。Visual Studio的调试器也支持对多线程应用的调试。 10. **示例代码** 压缩包中的“多线程编码例程”很可能包含了创建、运行和管理MFC线程的...
C语言中的断言assert是一个非常实用的调试工具。它可以帮助程序员在程序运行时检测变量是否满足特定的条件,如果不满足,则程序会立即...所以,在使用断言的同时,程序员还应当考虑如何在生产环境中处理这些异常情况。
- `wait()`:线程释放锁进入等待状态,直至被唤醒,常用于线程间的协作和同步。 #### Set判断元素重复的方法 `Set`通过`equals()`方法来判断元素是否重复。`equals()`用于比较两个对象是否相等,而`==`用于比较两...
`ExceptionHandler`可以捕获这些断言异常,提供详细的错误信息,如类名和行号。 2. **错误位置信息**:当异常发生时,`ExceptionHandler`可以提供错误的具体位置,包括类名和行数。这对于快速定位问题非常有帮助。 ...
在Java编程中,异常处理是一项至关重要的技能,它能够帮助开发者识别并处理程序运行时可能出现的问题,确保程序的健壮性和稳定性。异常是程序运行过程中遇到的非正常状态,这些状态可能导致程序无法按照预期执行。...
在提供的代码示例中,`CMainFrame` 类的一个实例被直接传递给新线程,导致了访问异常。问题一指出,这样做可能有问题,因为MFC对象不是线程安全的,它们的内部数据结构可能在不同线程中同时被修改,从而引发未定义的...
1. **异常处理链**:每个线程都有一个异常处理链,其中包含了多个异常处理程序。这些程序按照栈上的顺序依次尝试处理异常。 2. **结构化异常处理(Structured Exception Handling, SEM)**:Windows提供了一种结构...
第1周介绍Java语言的基本知识,包括数据类型、变量、表达式、对象、数组、条件语句、循环、类、接口、包、异常、断言和线程等;第2周介绍Java类库,包括向量、堆栈、映射、散列表和位组等数据结构,以及Swing组件、...
第1周介绍Java语言的基本知识,包括数据类型、变量、表达式、对象、数组、条件语句、循环、类、接口、包、异常、断言和线程等;第2周介绍Java类库,包括向量、堆栈、映射、散列表和位组等数据结构,以及Swing组件、...
在C#编程中,理解和正确使用断言(Assertion)与异常(Exception)对于编写健壮、可维护的代码至关重要。断言主要用于在开发阶段检测逻辑错误,确保程序内部状态的正确性,而异常则用于处理运行时发生的预期之外的...
Java中的异常分为两大类:**受检异常**(Checked Exceptions)和**非受检异常**(Unchecked Exceptions)。受检异常是在编译时必须处理的异常,通常表示可以预见并应通过代码进行预防的异常;而非受检异常则包括运行...
Java异常处理是Java编程中非常重要的一个概念,它关乎程序的稳定性和健壮性。在Java中,异常是程序运行时出现的不正常情况,可能是由于逻辑错误、资源不足或是外部条件不符合预期导致的。本篇文章将深入探讨Java异常...
这个Delphi单元可能包含了一个定制的日志类,该类通过断言来捕获和记录异常情况,结合了断言的强大调试功能和日志系统的信息记录特性。文件列表中的"codefans.net"可能是源代码文件或项目文件,其中包含了实现这种...
Java异常处理是编程过程中的重要组成部分,它帮助开发者在程序执行期间识别并处理错误和意外情况。Java异常是程序运行时出现的不正常状态,它们通常由Java虚拟机(JVM)或者Java类库在遇到特定问题时抛出。异常分为...
- **多线程支持**:异常处理机制能够很好地支持多线程程序,使得异常能够在多个线程间传递。 综上所述,C++中的异常处理机制不仅提高了程序的健壮性和可维护性,还为开发者提供了一种结构化的错误处理方式,使得...