Exception异常处理

 

打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。
Java中的异常类定义了程序中遇到的轻微的错误条件。
Java中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出、类文件格式错误等。这一类错误由Java运行系统处理,不需要我们去处理。

Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
try/catch/finally语句。

对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
如果父类中的方法抛出多个异常,则子类中的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)。
我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。这种方式通常应用于abstract base class和interface中。

 

import java.io.*;
class Excep
{
 Excep() throws ArithmeticException
 {
 }
 public int division(int a,int b) throws ArithmeticException,DivisorIsMinusException//抛出多个异常
 //Exception  使用throws (...)Exception编译器会强制要求处理异常,没有处理代码,则报错
 {
  //try
  //{
   if(b<0)
    throw new DivisorIsMinusException("Divisor can't be minus");//throws是声名,throw是抛出
   return a/b;
  
  
 }
 public int fn1(int a,int b) throws ArithmeticException,DivisorIsMinusException//Exception
 {
  return division(a,b);
 }
}

class ChildExcep extends Excep
{
 ChildExcep() throws FileNotFoundException
 //构造函数不能被继承,所以可以抛出新的异常
 {
 }
 public int division(int a,int b) throws ArithmeticException,DivisorIsMinusException
 //继承后不能抛出新的异常,要小于父类异常
 {
  return a/b;
 }
}
class DivisorIsMinusException extends Exception//自定义异常
{
 DivisorIsMinusException(String str)
 {
  super(str);
 }
}
class ExcepTest
{
 public static int method1(Excep excep)
 {
  try
  {
   return excep.division(5,0);
  }
  catch(ArithmeticException e)
  {
   System.out.println(e.toString());
  }
  catch(DivisorIsMinusException ex)
  {
   System.out.println(ex.toString());
   //System.exit(-1);
   //return;
  }
  return 0;
 }
 public static void main(String[] args) //throws Exception
 {
  ChildExcep ce=new ChildExcep();
  method1(ce);
  Excep excep=new Excep();
  try
  {
   //excep.division(5,0); 
   excep.fn1(5,-1);
   System.out.println("exception");
   return;
  }
  
  catch(ArithmeticException e)
  //异常按顺序捕获,通常特殊异常写在前面,普通异常写在后面,否则普通异常会先捕获
  {
   System.out.println(e.toString());
  }
  catch(DivisorIsMinusException ex)
  {
   System.out.println(ex.toString());
   System.exit(-1);//可以不实行finally语句
   //return;
  }
  catch(Exception e)
  {
   //System.out.println("can't divide by zero");
   //System.out.println(e.getMessage());
   //System.out.println(e.toString());//打印错误信息
   e.printStackTrace();//打印出源代码的哪一行出错,是什么错误
  }
  finally
  //不管有没有异常,前面语句是否已经return,只要不要出现exit(非零),finally内的语句都会实行
  {
   System.out.println("finally");
  }
  System.out.println("finish");//不管有没有异常,都会实行,如果前面没有return和exit
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值