在程序开发过程中一般会出现异常,那么何为异常呢,简单说就是在运行时期发生不正常情况。在java中我们通过类的形式来描述这些不正常情况,这些类就叫做异常类。问题多了描述的类也多了自然就会向上抽取形成异常体系父类为Throwable分成两大子类一类是可处理Exception其又分为编译异常和运行异常。一类是不可处理Error。
程序出现不正常是就需要反馈,在java中我们叫做抛出,通过关键字throw和throws来操作,凡是被这两个关键字操作的类和对象都具有可抛性。throws和throw也是有区别的:throw用在函数内,抛出异常对像;throws用在函数上可抛出多个,用逗号隔开。
按照java异常的创建思想进行自定义描述,并封装成对象,这种叫做自定义异常。自定义异常特别需要注意的一点是如果让一个类称为异常类,必须要继承异常体系,只有继承了才具有可抛性,才能被关键字所操作要不然会报错。
自定义异常一般有两种形式一种是函数声明式这种就需要在函数声明时结尾加上throws+继承了异常体系的类名,并且谁调用了这个函数那个函数也需要函数声明。另一种是异常处理的捕捉形式try-catch-finally的形式这种针对性强try里面是需要被检测的异常代码,catch(异常类,变量)里面是对异常的处理,finally里是一定被执行的代码。写了一个简单的自定义异常 代码如下:
class FuShuIndexException extends Exception//定义一个类继承Exception让其有资格抛出
{
FuShuIndexException()//构造函数DemoException进行初始化
{}
FuShuIndexException(String msg)
{
super(msg);
}
}
class Demo
{
public int method(int[] arr ,int index)throws FuShuIndexException //定义一个函数method方法 并返回。进行声明抛出
{
if(index<0)
throw new FuShuIndexException();//建对象进行抛出
return arr[index];
}
}
class ExceptionDemo
{
public static void main(String[] args)
{
int [] arr= new int[3];
Demo d = new Demo();
try
{
int num = d.method(arr,-3);//被检测的代码
System.out.println("num"+num);
}
catch (FuShuIndexException f)//接受异常对象
{
System.out.println(f.getMessage());//处理异常代码
f.printStackTrace();
}
System.out.println("over");
}
}
运行结果为:FuShuIndexException: 角标为负
at Demo.method(ExceptionDemo.java:17)
at ExceptionDemo.main(ExceptionDemo.java:30)
over
总结:
(1)catch里的处理f.getMessage(),f.printStackTrace()能调用时因为继承,getMessage():输出异常的信息;printStackTrace():输出导致异常的详细信息,这是父类Exception有的直接拿来用的。
(2)捕捉后可以继续运行程序并没有终止。
(3)能解决的catch不能的throw |
|