如果由于程序的错误或一些外部因素的影响导致用户在运行程序期间所有工作统统丢失,这个用户可能再也不会使用该程序了,为了尽量避免这类事情的发生,要做到以下几点:
1.向用户通知错误
2.保存好所有的工作
3.允许用户妥善的退出程序
异常可以看作是一种对象
一、处理异常
异常处理是一种用于处理程序中出现的异常情况的机制,它允许程序员在程序执行期间检测和响应错误,以便程序可以更可靠地运行。
注:要捕获那些你知道如何处理的异常,传播你不知道怎样处理的异常
1.异常分类:
Exception(异常):
Check Exception(检查异常):需要在代码中明确声明和处理,否则编译不通过。
例如,IOException、SQLException
Unchechked Exception(非检查异常):则不需要在代码中明确声明和处理
例如,NullPointerException、ArrayIndexOutOfBoundsException
Error(错误):是由Java虚拟机抛出的严重问题,一般不需要处理,程序员一般解决不了。
2.运行时异常与非运行时异常的区别
RuntimeException 是非受检查异常,这意味着它可以在代码中不必显式地处理或抛出。这些异常通常是由程序员编程错误(如访问 null 指针或使用错误的算法)引起的。
其他Exception 类都是受检查异常,必须在代码中显式地处理或者抛出。如果不处理或抛出,则编译器会报错。
-
运行时异常不需要显式地在代码中捕获并处理,可以由JVM自动抛出。
-
运行时异常通常由程序逻辑错误引起,应该通过改正代码逻辑来避免。
-
运行时异常不会影响程序的编译,只有在运行时才会抛出,因此更具灵活性。
3.Error与Exception的区别
Exception 表示程序本身可以处理的异常情况,通常可以通过 try-catch 块或 throws 声明来处理它们。
Error 表示程序本身无法处理的错误,通常意味着程序运行时出现了致命的问题,无法恢复,需要进行紧急处理。
4.异常处理器:
可以使用try-catch块来捕获和处理异常。try块包含可能抛出异常的代码,catch块用于捕获并处理特定类型的异常。如果try块中的代码抛出异常,程序的执行流程将跳转到与该异常类型匹配的catch块中。
如果try语句块中的任何代码抛出了catch子句中指定的一个异常类,那么
1.程序将跳过try语句块中的其他代码
2.程序将执行catch子句中的处理器代码
如果try语句块中的代码没有抛出任何异常,那么程序将跳过catch子句
如果方法中抛出了catch子句中没有声明的一个异常类型,那么这个方法就会立即退出
try {
// 可能会抛出异常的代码
} catch (ExceptionType1 e1) {
// 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {
// 处理 ExceptionType2 类型的异常
} finally {
// 在任何情况下都会执行的代码
//finally块通常用于释放资源或执行清理操作,例如关闭文件或网络连接。
}
5.抛出异常:
在Java中,可以使用throw关键字来抛出异常。当异常被抛出时,程序的执行流程将跳转到与该异常类型匹配的catch块中。
if (x < 0) {
throw new IllegalArgumentException("x must be non-negative");
//如果x小于0,将抛出一个IllegalArgumentException类型的异常,
//并将异常信息设置为"x must be non-negative"。
}
throws:表示抛异常,使用在方法上,提醒调用者该方法可能出现哪些异常
语法:访问修饰符 返回值 方法名() throws 异常类型{}
throw与throws的区别: | |
|
6.创建异常类
有时可能遇到任何标准异常类都无法描述清楚的问题,这时就需要创建自己的异常类。
语法:
class 异常类名 extends 父类名{
public 异常类名() {}
public 异常类名(String gripe){
super(gripe)
}
}
7.分析堆栈轨迹元素
查看异常信息:printStackTrace
stack trace为堆栈轨迹