java异常概述

异常就是程序在编译和运行时出现的不正常情况。通过面向对象的编程思想将异常进行封装,以java类的形式对其进行描述。

一. 异常的体系
1.• Throwable
  • Error
    • 通常出现重大问题如:运行的类不存在或者内存溢出等。
    • 不编写针对代码对其处理
  • Exception
    • 在运行时运行出现的一切情况,需要在程序内部进行处理或者抛出。

为了记忆和书写方便,Error和Exception的子类有是由其父类名作为类名的后缀名。

2.Throwable类中的共性方法

getMessage()
 获取异常信息,返回字符串。

toString()
 获取异常类名和异常信息,返回字符串。

printStackTrace()
 获取异常类名和异常信息,以及异常出现在程序中的位
置。返回值void。

printStackTrace(PrintStream s)
通常用该方法将异常内容保存在日志文件中,以便查
阅。

二. 对异常的处理方式

java中提供了特定的语句对异常进行处理,主要是通过两种方式。

1.try catch finally语句处理

格式:

try
{
  //需要被检测的代码;
}
catch(异常类 变量)
{
  //处理异常的代码;(处理方式)
}
finally
{
  //一定会执行的语句;
}

2.在功能上通过throws的关键字声明该功能有可能会出现问题,要注意与throw关键字的区别,该关键字是在方法内部对异常对象的抛出,而throws是对异常类的声明

如下代码

class Model{
    public static void main(String[]args){
        try{
            div(5,0);//可能发生异常的语句
        }catch(Exception e){
            System.out.println("除数不能是零");//对异常捕获之后的处理
            e.printStackTrace();
        }finally{
            System.out.println("over");//无论是否发生异常最终都会执行的语句,除了在前面出现程序结束的情况,例如System.exit();退出程序
        }
    }
    public static int div(int a,int b)throws Exception{//此处对内部可能出现的异常进行声明抛出,由调用者进行处理
        return a/b;
    }
}

三.自定义异常

当需要对一些在相应程序运行环境下产生的异常进行处理时,经常会使用到自定义异常,对异常对象进行封装。

自定义异常类需要继承自Exception或者其子类。通过构造函数定义异常信息,同时通过throw关键字对异常进行抛出。

如下代码

class FuShuException extends Exception
{
    private int value;

    FuShuException()//因为要对构造函数进行重载,所以需要手动写入无参的构造函数
    {
        super();
    }
    FuShuException(String msg,int value)
    {
        super(msg);//借用父类的构造函数将异常信息进行处理
        this.value = value;
    }

    public int getValue()
    {
        return value;
    }

}
class Demo
{
    int div(int a,int b)throws FuShuException//内部抛出异常,必须要在外部进行标识,RuntimeException异常及其子类异常是不需要标识的。
    {
        if(b<0)
            throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//当异常发生时通过手动对异常进行声明抛出

        return a/b;
    }
}
class Model
{
    public static void main(String[] args) 
    {
        Demo d = new Demo();
        try
        {
            int x = d.div(4,-9);
            System.out.println("x="+x);        
        }
        catch (FuShuException e)
        {
            System.out.println(e.toString());
            System.out.println("错误的负数是:"+e.getValue());
        }
        finally
        {
        System.out.println("over");
        }

    }
}

四.异常扩展

1.对于多异常的处理

声明异常时,建议声明更为具体的异常。这样处理的可以更具体。
对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。
如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

2.RuntimeException

运行时异常,RuntimeException以及其子类如果在函数中被throw抛出,可以不用在函数上标识

3.常见异常类

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

输入输出异常:IOException
原文地址:https://www.cnblogs.com/ss561/p/4573264.html