异常:Java运行期间发生的问题就是异常,另外,Java中运行时发生的除了异常Exception还有错误Error。
异常:可以有针对性的处理方式;错误:通常发生后不会有针对性的处理方式,往往是系统级别的问题,无法针对处理,只能修正代码。
举个例子:对给定的数组同过给定的交表获取元素,
class Demo
{
/*
对给定的数组通过给定的角标获取元素。
*/
int getElement(int[] arr,int index)
{
/*
它所提供的信息不够给力。想要更清晰,需要自己写。
它的抛出不满足我们的要求。准备自己抛。
*/
if(arr==null)
{
throw new NullPointerException("arr指向的数组不存在");
}
if(index<0 || index>=arr.length)
{
//该条件如果满足,功能已经无法继续运算。这时 就必须结束功能,并将问题告知给调用者。这时就需要通过异常来解决。
//怎么用呢?
//1,创建一个异常对象。封装一些提示信息(自定义)。
//2,需要将这个对象告知给调用者。怎么告知呢?怎么将这个对象传递到调用者处呢?通过关键字throw就可以完成。 throw 异常对象;
//3,throw用在函数内,抛出异常对象,并可以结束函数。
throw new ArrayIndexOutOfBoundsException("错误的角标,"+index+"索引在数组中不存在");
}
自定义异常:
上边的Exception中的异常不好认,准备定义一个符合我的程序要求的问题名称以及问题的信息,其实异常就是讲问题,封装成了对象。
查阅API发现:
Throwable
|--Error
|--Exception
Throwable是异常和错误的父类,自定义异常被抛出,必须是继承 Throwable或者Throwable的子类,该对象才可以被Throw抛出。
声明和捕获:
声明:将问题标识出来,报告给调用者。
如果函数内通过throw抛出了编译时异常,而捕获,那么必须通过throws进行声明,让调用者去处理。
捕获:Java中对异常有针对性的语句进行捕获。
语句:
try
{
//需要被检测的语句。
}
catch(异常类 变量)//参数。
{
//异常的处理语句。
}
finally
{
//一定会被执行的语句。
}
throw和throws的区别?
1,throw用在函数内。
throws用在函数上。
2,thorw抛出的是异常对象。
throws用于进行异常类的声明,后面异常类可以有多个,用逗号隔开。
class Demo
{
void show()throws Exception
{
throw new Exception();
}
}
class
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}