/*捕获的所有异常都是Exception 异常
在函数后面直接抛出异常 是当有异常发生的时候 抛出我们指定的异常
java 中的数组越界 ArithmeticException 都是java编译器自动处理
运行时异常是不用我们来捕获的
throws 在声明抛出异常的时候 用这个 在我们抛出异常的时候用throw
我们在捕获异常的时候还可以继续将异常抛出 而且还可以抛出新的异常
我们还可以定义自己的异常类我们的异常类必须 从Exception派生 并且在构造函数调用 super(str) 调用
基类的构造函数
try
{
..
}
catch()
{
..
}
finally
{
..没有异常也会执行 发生异常也会执行 任何时候finally 都会执行 除了程序终止运行 java.lang.System类的 函数
}
我们应该在所有异常之后捕获 Exception因为所有 异常都是Exception 会重复 捕获错误
在继承中除了构造函数 因为构造函数不能被继承 其他函数抛出的异常都必须和 父类的一样 或者是父类异常的子集
*/
import java.lang.Exception; //引入 Exception类
class Excep
{
public int Division(int a,int b) throws ArithmeticException ,DivisorIsMinusException //声明抛出的异常的类型名 对于要抛出的异常我们必须先声明下
{
if(b<0)
throw new DivisorIsMinusException("Divisorcan't be minus");
return a/b;
}
public int fn1(int a,int b) throws ArithmeticException ,DivisorIsMinusException //声明抛出的异常的类型名
{
return Division(a,b);
}
}
class ExChild extends Excep //继承覆盖的方法声明的异常只能和父类相同或者是父类异常的子集
{
public int Division(int a,int b) throws ArithmeticException ,DivisorIsMinusException
{
return a/b;
}
}
class DivisorIsMinusException extends Exception //所有异常类都应该从Exception派生出来
{
DivisorIsMinusException(String str)
{
super(str); //调用父类的构造函数
}
}
class ExceptTest
{
public static void main(String []args)// throws Exception //直接抛出Exception异常由运行时系统处理 由运行时系统处理的化程序会停下 并且打印异常
{
Excep o=new Excep();
try //测试异常
{
o.Division(3,-20); //如果出现异常那么自动跳转到异常处理 下面不会执行
System.out.println("connet close ");
}
catch(ArithmeticException e) //捕获异常 异常类 从Exception派生
{
System.out.println("can't divide by zero !");
System.out.println(e.getMessage());//从throwable 继承而来的函数 获得消息字符串
System.out.println(e.toString()); //获得一个异常类的详细说明
throw new ArithmeticException(); //在异常中抛出另第一个一个异常 不能将Exception作为第一个捕获对象否则出错 因为所有异常都是 Exception
}
catch(DivisorIsMinusException dd)
{
System.out.println(dd);
System.exit(-1);
return;
}
catch(Exception a)
{
System.out.println(a.toString());
}
finally
{
System.out.println("finall !");
}
System.out.println("finish !");
}
}