java异常机制(学习笔记)

来源:互联网 发布:dota2比赛视频软件 编辑:程序博客网 时间:2024/05/16 01:14

1、捕捉异常

在概念之前,先看一看常用的try-catch语句块用法:

package com.flz.exception;public class Take{    public static void main(String[] args)    {        try        {            String string="lili";            System.out.println(string+"的年龄是:");            int age=Integer.parseInt("20L");//数据类型转换。            System.out.println(age);        } catch (NumberFormatException e)        {            e.printStackTrace();//输出异常性质。        }        System.out.println("program over!");    }}

结果:

lili的年龄是:java.lang.NumberFormatException: For input string: "20L"    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)    at java.lang.Integer.parseInt(Integer.java:580)    at java.lang.Integer.parseInt(Integer.java:615)    at com.flz.exception.Take.main(Take.java:12)program over!

笔记:
- try语句中包含可能出现异常的程序代码。
- printStackTrace()方法输出异常比较完整的信息
- getMessage()输出错误性质,toString()给出异常类型与性质。
- 养成良好的变成习惯,最好在catch代码块中写入处理异常的代码。

2、finally语句块

1、finally语句块的作用:希望catch块中没有抛异常的代码,希望catch块抛异常的代码不会影响资源的关闭。
2、finally语句块在以下四种特殊情况下不会被执行
- 在finally语句块内发生了异常。
- 在前面的代码中使用了System.exit()退出程序。
- 程序所在的线程死亡。
- 关闭cpu。

3、自定义异常

描述:

使用java内置的异常类可以描述编程时出现的大部分异常情况。除此之外,用户只需要继承Exception类即可自定义异常类。

步骤:

  1. 创建自定义异常类。
  2. 在方法中通过throw关键字抛出异常对象。
  3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明出通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
  4. 在出现异常方法调用者中捕获并处理异常。

例子:

package com.flz.exception;public class MyException extends Exception//自定义异常{    public MyException(String message)//构造方法    {        super(message);//父类构造方法     }}
package com.flz.exception;public class Tran{    //在方法的声明出通过throws关键字指明要抛出给方法调用者的异常    static int avg(int num1,int num2) throws MyException    {        if(num1<0||num2<0)        {            throw new MyException("参数不可以是负数");//在方法中通过throw关键字抛出异常对象。        }        if(num1>100||num2>100)        {            throw new MyException("参数不能大于100");//在方法中通过throw关键字抛出异常对象。        }        return(num1+num2)/2;    }    public static void main(String[] args)    {        try{            int result=avg(108, 12);            System.out.println(result);        }catch(MyException e){            System.out.println(e);        }    }}

运行结果:com.flz.exception.MyException: 参数不能大于100

使用throws关键字抛出异常:

例子:

package com.flz.exception;public class ThrowsTest{    static void pop() throws NegativeArraySizeException    {        int[]arr=new int[-3];    }    public static void main(String[] args)    {        try        {            pop();        } catch (NegativeArraySizeException e)        {            System.out.println("pop方法抛出的异常(数组越界)");        }    }}

运行结果:`pop方法抛出的异常(数组越界)

throw和throws的区别:

(注:摘自百度,觉得比较好理解的答案)
throw语句用在方法体内,表示抛出异常,由方法体内的语句处理
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理

throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

throws说明你有那个可能,倾向。
throw的话,那就是你把那个倾向变成真实的了。`

另外:

(摘自: http://cuityang.iteye.com/blog/1969489)
基类为Throwable,Error和Exception继承Throwable
Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。
Exception体系包括RuntimeException体系和其他非RuntimeException的体系 :
① RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误

(2)其他非RuntimeException(IOException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

在java中,异常分为两种,运行时异常(也就是uncheckException)和已检查异常checkException

checkException是必须要处理的,也就是不能抛出,必须通过try-catch来完成,不处理的话是不能进行编译的,既然是checked异常,catch clause里理应做些有用的事情??修复它!catch里为空白或者仅仅打印出错信息都是不妥的!为空白就是假装不知道甚至瞒天过海,但是,出来混迟早 要还的,迟早会报unchecked异常并程序挂起 。

0 0
原创粉丝点击