Java异常处理

本文是对Java异常处理的总结。介绍了异常是处理程序错误的机制,包括抛出和捕获异常。阐述了异常分类,如Error和Exception。还讲解了catch、finally语句,声明方法抛出异常,throw和throws区别,以及自定义异常的使用步骤。
异常的概念

最近重新学习了java,以下是对java异常处理的一些总结
1.java异常是java提供的用于处理程序中错误的一种机制。
2.所谓错误是指在程序的运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)。
3.设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果)。
4.java程序的执行过程中出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并被提交给java运行时系统,这个过程称为(throw)抛出异常。
5.java运行时系统收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交其处理,这一过程称为捕获(catch)异常。

以下是简单的一个数组下标越界异常的捕获;

public class TestEx {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
   try {
     int[] arr = {1 , 2 , 3 };
     System.out.println(arr[4]);
     } catch (Exception e) {
    System.out.println(e.getMessage());// 输出具体错误在什么地方,这里输出是4
    }
 }
异常的分类

实际上,j2dk中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有的异常类直接或间接的父类是Throwable(不用记)。
Throwable类下主要的类是Error类和Exception类,这个体系有个特点,就是Throwable及其子类都具有可抛性。
Error错误是指java虚拟机出错,这种情况是我们处理不了的错误。
Exception错误我们能够处理的异常,Exception里还有一类经常发生的异常类RuntimeException,这种类型我们可以不用必须捕捉 。

catch语句

在catch语句中是对异常进行处理的代码,每个try语句块可以伴随着一个或多个catch语句,用来处理可能产生的不同类型的异常对象,在catch语句中可以使用该对象的一些方法获取这些信息。
例如:getMessage()方法,用来得到有关异常事件的信息。
printStackTrace()方法,用来跟踪异常事件发生时执行退栈的内容。

finally语句

finally语句主要主要是为异常提供一个统一的出口。
通常finally语句用来进行资源的的清除工作,如关闭打开的文件,删除临时文件。

声明方法抛出异常

这里简单写
比如我某个方法无法处理这个异常,那我们可以抛出这个异常,void aa() throw IOException{ . . . },当然其他方法想要调用这个方法需要catch这个异常,也可以继续向外抛异常。main()方法也可以抛出异常,交给java运行时系统。

throw和throws的区别

1.throw用在方法体内,throw是语句抛出一个异常(对象);throws是用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

2.throw是具体向外抛异常的,抛出的是一个异常实例(代码中对应的有model);throws声明了是哪种类型的异常,使它的调用者可以捕获这个异常。

3.throw,如果执行了,那么一定是抛出了某种异常;而throws表示可能出现。

4.同时出现的时候,throws出现在函数头,throw出现在函数体,两种不会由函数处理,真正的处理由函数的上层调用处理。

自定义异常

自定义异常的好处在于可以自己规定异常现象,自定义异常类的使用有三步:
(1)封装好一个Exception类的子类。
(2) 在某类的方法声明处用throws 将该类抛出,并在该方法的方法体中使用throw 语句抛出该异常对象,导致该方法中断执行。
(3)程序在调用此方法时必须将该方法放在try-catch-finally 复合语句中进行捕获异常并处理异常。以下是简单的自定义异常;

//封装Exception的子类
public class MyException extends Exception {
  public void message() {
    System.out.println("该值小于60了哦")
    }  
}
class Myscore {
    void score(int aint) throws MyException {
 if(aint<60) {  //表示若aint<60便创建一个异常对象并抛出该对象。
  MyException ex = new MyException();
  throw ex;
 }  
 }
 // main方法调用
    public static void main(String[] args) {
    Myscore s = new Myscore();
    try {
     s.score(40);
  } catch(MyException e) {
  e.message();
 }
}
}
``




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值