JAVA异常处理

JAVA异常处理

前言

在编写程序的过程中,即使经验再丰富的程序员也不可避免的会出现错误,出现错误一般有三种情况:语法错误、逻辑错误、运行错误。语法错误是由于没有遵循Java的语言规则引起的,通过前面的学习,我们知道这种错误一般可以有编译器提醒解决,而逻辑错误也就是常见的BUG出现的状况,这只有在运行时一步步调试运行来解决。而运行错误,则是在程序运行时出现严重不可解决韦恩导致程序终止运行的错误,如:除数为0,数组下标越界、需要存取的文件不存在或网络突然中断等。通常这种情况称为异常。对于异常的处理则为一场处理

学习目标

1.理解异常处理的概念
2.熟悉异常类型
3.掌握如何在方法中声明异常
4.掌握如何在方法中抛出异常
5.使用try…catch代码处理异常
6.创建自己的异常类
7.在try catch 代码块中使用finally子句

1.异常与异常类型

按照异常在编译时是否被检测来分可以分为两大类
1.受检异常(编译时被检测到的错误)
2.非受检异常(Runtime Exception和Error)

2.异常处理

为避免出现异常导致中止执行,Java提供了相应得机制进行处理,当一个程序抛出异常后,将会回溯到第一个由catch的地方进行处理;

异常处理程序的基本形式
method()throws Exceptionl,Exception2,...
{
  ...
  try
  {
     ...程序块
  }
  catch(Exception1 e1)
  {
    //对Exceptionl e1处理
  }
}

2.1 声明异常

声明异常时当方法执行时,声明方法可能出现的异常。因为任何代码都有可能出现系统错误和运行异常,所以Java 不需要在任何方法中显式声明Error和RuntimeException。但是,如果方法出现其他异常,则必须在方法声明中显示声明它们。

异常声明 method()throws Exception
public class TestThrows
{
   static void array(int size)throw NegativeArraySizeException,
   ArratIndexOutOfBoundsException
   {
       int [] a=new int[size];
       System.out.println(a[10]);
   }
   static void test()
   {
     array(-1);
   }
   public static void main(String[] args)
   {
     try{
        test();
     }catch (ArrayIndexOutBoundsException e)
     {
       System.out.println("数组越界");
     }
   }
}

2.2 抛出异常

在声明方法中如果出现异常,可以通过关键字throw 来抛出异常对象,抛出异常的语法如下

throw new ConstructorException();

ConstryctorException()是指异常类的构造方法。通过new ConstructException()来构造一个异常类的对象,再通过throw来抛出这个对象。要注意的是:一个方法只能抛出方法声明中的异常,或者Error、RuntimeException 和两者的子类

public class TestThrow
{
   void method(){//抛出ArithmeticException 异常,合法
      throw new ArithmeticException();//ArithmeticException为RuntimeException子类
   }
   void method2(){//抛出一个IOException 异常,不合法
     throw new IOExcepetion()}
}

2.3捕获异常

通过上面介绍,我们知道了如何声明异常、如何抛出异常。下面我们将介绍如何捕获异常。在Java语言中,用try…catch语句来捕获异常。格式如下:

try{
//可能会出现异常情况的代码;
}catch(Exceptionl e){
}
catch(Exceptionl2 e)
{
 //处理Exception2异常
}

如果在try子句执行期间没有出现异常,则跳过catch子句,如果try代码块中的语句抛出异常,Java则跳过剩下的语句,并开始搜索异常处理程序,一旦异常与catch子句中列出的其中一个异常匹配,则执行catch子句的代码;如果异常类型与catch子句中任何异常都不匹配,Java将退出该方法,并把异常传递到调用该方法的方法,并继续执行相同的过程来查找处理程序,如果在正被调用的方法链中没有找到处理程序,程序将会中止。

3.重新抛出异常

当方法中出现异常时,如果没有捕捉到异常,方法就立即退出,如果在退出钱需要方法执行某个任务,那么就可以捕捉方法中的异常,任何重新把它抛出给结构中实际处理程序

try{
可能出现异常情况的代码
}catch(Exception e){
  //处理出现的Exception异常
  throw e//重新抛出异常
}

在重新抛出异常中,要需要注意以下几点
(1)程序执行到throw 时立刻终止,不在执行它后面的语句
(2)在包含throw语句的try块后面寻找其匹配的catch子句来捕获异常
(3)如果找不到则向上一层程序JVM来处理。

4.finally

finally子句中的语句不管是否异常是否被抛出都要执行,也就是就算throw一个异常catch接受处理以后也要执行finally中的语句。

5.自定义异常

Java提供许多异常类,但是Java所提供的异常类无法合适的描述我们所遇到的问题时,我们就可以自定义异常。
以下时需要注意的几个点

1) 自定义异常需要继承Exception以及其子类
(2)若要抛出自定义的异常对象,则使用throw 关键字
(3)若要抛出自定义异常,需要将所调用的方法定义为可抛出异常的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值