exception 类 java_Java中的异常有哪几类?分别怎么使用?

一、Java中使用异常处理所带来的好处:

1、统一异常处理方式。当问题出现的时候,你也许不清楚该如何处理,但你知道不应该置之不理,在同一个环境里对异常做出正确的决定。(相对于早期C等语言主动检查错误来说)

2、降低错误处理代码的复杂度。如果不使用异常,那么就必须检查特定的错误,并在程序中得许多地方去处理它。而如果使用了异常,那就不必在方法调用处检查错误,因为异常机制将保证能够捕获这个错误。由此,将所有的异常在一个地方处理,即所谓的异常处理程序中。这种方法不仅节省代码,而且把“描述在正常执行过程中做了什么事”的代码和“出了问题怎么办”的代码分离。总之,与以前的错误处理方法相比,异常机制使代码的阅读、编写和调试工作更加井井有条。

二、Java抛出异常的流程:

通过当前正在解决的问题环境,不清楚如何处理当前产生的问题的时候,就要抛出异常,而不是顺着原来的路径执行下去。

当抛出异常后:首先,同Java其他对象的创建一样,将使用new在堆上创建异常对象。然后,当前的执行路径(它不能继续下去了)被终止,并且从当前环境中弹出异常对象的引用。此时,异常处理机制接管程序,并开始寻找一个恰当的地方继续执行程序。这个恰当的地方就是异常处理程序,它的任务就是将程序从错误的状态恢复,以使程序能要么换一种方式运行,要么继续运行下去。

三、异常分类:

800b2d876d553717d94e1ffb3ead71c4.png

Throwable是所有异常的根,java.lang.Throwable

Error:错误,Java.lang.Error

Exception:异常,java.lang.Exception

Exception分为CheckedException和RuntimeException,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。

①checkedException:只有Java语言提供了Checked异常,Java认为checked异常都是可以被处理的异常,所以Java程序必须显示处理checked异常。如果程序没有处理checked异常,该程序在编译时会发生错误无法编译。这体现了Java的设计哲学:没有完善错误处理的代码根本没有机会被执行。对Checked异常处理方法有两种:

1、当前方法知道如何处理该异常,则用try...catch块来处理。

2、当前方法不知道如何处理,则在定义该方法时声明抛出该异常。

import java.io.IOException;

/**

* Checked异常测试方法

* @author xy

*

*/

public class CheckedExceptionMethods

{

// 总异常类,既有checkedException又有RuntimeException,所以其中的checkedException必须处理

public void method1() throws Exception

{

System.out.println("我是抛出异常总类的方法");

}

// 捕获并处理这个异常

public void testMethod1_01()

{

try

{

method1();

}

catch (Exception e)

{

e.printStackTrace();

}

}

// 把异常传递下去

public void testMethod1_02() throws Exception

{

method1();

}

public void testMethod1_03() throws Exception

{

throw new Exception();

}

public void testMethod1_04()

{

try

{

throw new Exception();

}

catch (Exception e)

{

e.printStackTrace();

}

}

// checkedException典型代表IOException

public void method2() throws IOException

{

System.out.println("我是抛出IO异常的方法");

}

public void testMethod2_01()

{

try

{

method2();

}

catch (Exception e)

{

e.printStackTrace();

}

}

public void testMethod2_02() throws Exception

{

method2();

}

}

我们比较熟悉的Checked异常有

Java.lang.ClassNotFoundException

Java.lang.NoSuchMetodException

java.io.IOException

②RuntimeException

Runtime如除数是0和数组下标越界等,其产生频繁,处理麻烦,若显示申明或者捕获将会对程序的可读性和运行效率影响很大。所以由系统自动检测并将它们交给缺省的异常处理程序。当然如果你有处理要求也可以显示捕获它们。

/**

* 运行时异常测试方法

* @author xy

*

*/

public class RuntimeExcetionMethods

{

public void method3() throws RuntimeException

{

System.out.println("我是抛出运行时异常的方法");

}

public void testMethod3_01()

{

method3();

}

public void testMethod1_02()

{

throw new RuntimeException();

}

}

我们比较熟悉的RumtimeException类的子类有

Java.lang.ArithmeticException

Java.lang.ArrayStoreExcetpion

Java.lang.ClassCastException

Java.lang.IndexOutOfBoundsException

Java.lang.NullPointerException

借鉴自:http://blog.csdn.net/woshixuye/article/details/8230407 侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值