java异常处理
2016-04-01 19:31
337 查看
Java的错误与异常
错误(error)指程序运行时遇到的硬件或操作系统的错误。
一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错误等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常不处理。
异常(exception)指在硬件和操作系统正常时,程序遇到的运行错。
java异常被分为两大类:Checked异常和Runtime异常(运行时异常)。
所有RuntimeException类及其子类的实例被称为Runtime异常,不是RuntimeException类及其子类的异常实例则被称为Checked异常。
只有java语言提供了Checked异常,其他语言都没有提供,java认为Checked异常都是可以被处理(修复)的异常,所以java程序无须显式的处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误,无法通过编译。
错误与异常类
Error错误类
Exception异常类
除数为0的算术异常、数组下标越界异常、空指针异常等。
常见的异常
1.算术异常ArithmeticException:除数为0
2.空对象异常NullPointerException
int a[] = null;
a[0]= 1; //对空数组中的元素进行操作,产生空对象异常
Stringstr = null;
System.out.println(str.length()); //调用空对象的方法,产生空对象异常
3.类型强制转换异常ClassCastException
Objectobj = new Object();
Stringstr = (String) obj;
4.负数组长度异常NegativeArraySizeException
int a[] = new int [-1]; //产生负数组长度异常
5.数组下标越界异常ArrayIndexOutOfBoundsException
int a[] = new int[1];
a[1] = 1; //产生数组下标越界异常
6.数值格式异常NumberFormatException
int j = Integer.parseInt("abc"); //产生数值格式异常
异常处理语句语法
try
{
语句1 //存在潜在异常的代码
}
catch(异常类 异常对象)
{
语句2 //捕获到异常并进行处理的代码
}
finally
{
语句3 //最后必须执行的代码,无论是否捕获到异常。异常机制总是保证finally块总是被执行。只有
//finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果
//finally中使用了return或者 throw等终止方法的语句,则就不会跳回执行,直接停止。
}
使用finally回收资源
java的垃圾回收机制不会回收任何的物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。
在哪里回收这些物理资源呢?
答:在finally块中,因为如果try块的某条语句引起一场,该语句后的其他语句通常不会被执行,那将导致位于该语句后的资源回收语句得不到执行;如果在catch块里进行资源回收,但catch块完全有可能得不到执行,这也将导致不能及时回收这些物理资源。所以我们不管try块中的代码是否出现异常,也不管哪个catch块会被执行,finally块总会被执行。
抛出自定义异常对象的throw语句
throw 异常对象
publicvoid set(int age)
{
if (age>0 && age<100)
this.age = age;
else
throw new Exception("IllegalAgeData"); //抛出异常
}
方法声明抛出异常的throws子句
[修饰符] 返回值类型 方法([参数列表]) [throws 异常类]
public static int parseInt(String s) throws NumberFormatException
异常对象包含的常用方法:
1. getMessage();返回该异常的详细描述字符
2. printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。
3. printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流
4. getStackTrace():返回该异常的跟踪栈信息。
java的异常跟踪栈
异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程.
虽然printStackTrace()方法可以很方便地追踪异常的发生状况,可以用它来调试,但是在最后发布的程序中,应该避免使用它。而应该对捕获的异常进行适当的处理,而不是简单的将信息打印出来。
错误(error)指程序运行时遇到的硬件或操作系统的错误。
一般是指虚拟机相关的问题,如系统崩溃,虚拟机出错误等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常不处理。
异常(exception)指在硬件和操作系统正常时,程序遇到的运行错。
java异常被分为两大类:Checked异常和Runtime异常(运行时异常)。
所有RuntimeException类及其子类的实例被称为Runtime异常,不是RuntimeException类及其子类的异常实例则被称为Checked异常。
只有java语言提供了Checked异常,其他语言都没有提供,java认为Checked异常都是可以被处理(修复)的异常,所以java程序无须显式的处理Checked异常。如果程序没有处理Checked异常,该程序在编译时就会发生错误,无法通过编译。
错误与异常类
Error错误类
Exception异常类
除数为0的算术异常、数组下标越界异常、空指针异常等。
常见的异常
1.算术异常ArithmeticException:除数为0
2.空对象异常NullPointerException
int a[] = null;
a[0]= 1; //对空数组中的元素进行操作,产生空对象异常
Stringstr = null;
System.out.println(str.length()); //调用空对象的方法,产生空对象异常
3.类型强制转换异常ClassCastException
Objectobj = new Object();
Stringstr = (String) obj;
4.负数组长度异常NegativeArraySizeException
int a[] = new int [-1]; //产生负数组长度异常
5.数组下标越界异常ArrayIndexOutOfBoundsException
int a[] = new int[1];
a[1] = 1; //产生数组下标越界异常
6.数值格式异常NumberFormatException
int j = Integer.parseInt("abc"); //产生数值格式异常
异常处理语句语法
try
{
语句1 //存在潜在异常的代码
}
catch(异常类 异常对象)
{
语句2 //捕获到异常并进行处理的代码
}
finally
{
语句3 //最后必须执行的代码,无论是否捕获到异常。异常机制总是保证finally块总是被执行。只有
//finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果
//finally中使用了return或者 throw等终止方法的语句,则就不会跳回执行,直接停止。
}
使用finally回收资源
java的垃圾回收机制不会回收任何的物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。
在哪里回收这些物理资源呢?
答:在finally块中,因为如果try块的某条语句引起一场,该语句后的其他语句通常不会被执行,那将导致位于该语句后的资源回收语句得不到执行;如果在catch块里进行资源回收,但catch块完全有可能得不到执行,这也将导致不能及时回收这些物理资源。所以我们不管try块中的代码是否出现异常,也不管哪个catch块会被执行,finally块总会被执行。
抛出自定义异常对象的throw语句
throw 异常对象
publicvoid set(int age)
{
if (age>0 && age<100)
this.age = age;
else
throw new Exception("IllegalAgeData"); //抛出异常
}
方法声明抛出异常的throws子句
[修饰符] 返回值类型 方法([参数列表]) [throws 异常类]
public static int parseInt(String s) throws NumberFormatException
异常对象包含的常用方法:
1. getMessage();返回该异常的详细描述字符
2. printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。
3. printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定的输出流
4. getStackTrace():返回该异常的跟踪栈信息。
java的异常跟踪栈
异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程.
虽然printStackTrace()方法可以很方便地追踪异常的发生状况,可以用它来调试,但是在最后发布的程序中,应该避免使用它。而应该对捕获的异常进行适当的处理,而不是简单的将信息打印出来。
相关文章推荐
- IIS 错误 Server Application Error 详细解决方法
- Ruby中的异常处理代码编写示例
- Lua教程(六):编译执行与错误
- 完美解决Persits.Jpeg.1 错误 ''800a0001''
- "在试着设置任务帐户信息时出现错误,指定的错误是:0x80070005:拒绝访问
- Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止。
- MySQL命令行界面中出现字符错误提示的原因及解决方法
- 修复ShopNC使用QQ 互联时提示100010 错误
- MySQL抛出Incorrect string value异常分析
- mysql错误处理之ERROR 1665 (HY000)
- 使用Raygun对Node.js应用进行错误处理的方法
- C#新手常犯的错误汇总
- php自定义错误处理用法实例
- Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
- 使用PHP的错误处理
- 浅谈C#中简单的异常引发与处理操作
- msxml3.dll 错误 '800c0005'解决方案
- asp提示Server 对象 错误 ASP 0178 : 80070005
- asp页面提示Response 对象 错误 ASP 0156 : 80004005 HTTP 头错误
- ADODB连接access是出现 80004005 错误的解决方法