• 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
  • 相关阅读:
    SetROP2
    JOIN
    Delphi深度探索之PItemIDList的基本概念
    访问网络资源示例
    AVICAP 中文
    AVICAP (全)
    摄像头(简介)
    以远程计算机上的用户身份访问Com+应用
    非匿名方式访问远程的com+
    三层控件基础知识
  • 原文地址:https://www.cnblogs.com/ss561/p/4573264.html
Copyright © 2020-2023  润新知