java异常处理

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()方法可以很方便地追踪异常的发生状况,可以用它来调试,但是在最后发布的程序中,应该避免使用它。而应该对捕获的异常进行适当的处理,而不是简单的将信息打印出来。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值