zoukankan      html  css  js  c++  java
  • 第9章异常

    Throwable类

    Throwable是所有异常的父类.而Throwable又有俩个直接子类:

    1、Error:这个错误一般是JVM和硬件引发的问题,发生了这个错误,一般是不通过代码去处理问题的

    2、Exception:称之为异常,异常是程序在编译、运行的时候出现的异常,用户可以对异常进行具体的处理,一般可以通过修改代码来处理异常.如果不去处理异常的话,程序将会停止运行.

    只有当对象是Throwable类的子类类型的时候,该对象才能通过java虚拟机和throw语句抛出.

    例子:

    Throwable t1=new Throwable();
    //创建一个Throwable类型的异常,括号内可以填写该异常的详细信息

    Throwable类有些常用来显示异常信息的方法:

    1、对象.getMessage();会返回该异常对象的详细信息字符串

    2、对象.toString();当打印对象的时候会自动调用的方法,会返回该对象的父类和详细信息,

    3、对象.printStackTrace();打印方法 这个是最常用的,会打印发生错误的代码行号,且异常信息会报红

    异常和错误

    程序异常是指程序在编译或运行期间发生了某种异常,需要处理异常,否则程序会结束运行(如数组索引越界等问题)

    程序错误时程序在运行期间发生了某种错误(Error).通常没有具体的处理方式,程序会结束运行,一般都是系统级别的问题,用户一帮无法针对Error进行处理,只能修正代码.是JVM所在系统发生并反馈给JVM的.(如内存超出等问题)

    捕获处理

    用法:

    //        //捕获处理 
    //         try {
    //             //可能发生异常的代码
    //         } catch(异常类型 变量名){
    //             //发生异常后的处理
    //         }
             

    如果不进行异常处理的话,一发生异常程序就停止了,如果想要当发生异常后继续执行catch之后的代码,就需要使用到异常捕获了.

    我们可以将可能会发生异常的代码放入try语句中,发生异常后处理异常的语句放在catch语句中,而异常处理完想要执行的语句放在后面.

    抛出处理

    除了捕获处理,还有抛出处理,当方法内部不想处理异常,就可以进行抛出处理,让调用者来处理异常问题.

    例子:

        public static int demomo(int a,int b) throws     Exception{//声明抛出异常的类型
            if (b==0)
            {
                throw new Exception("除数为0");
                //throw是用于方法内部用于抛出一个异常的,而throws是用于方法声明上的,说明抛出的异常类型
                //而throw后面只能有一个异常对象,throws后面一次能够声明多个异常类型.
            }
            
            
            return a/b;
        }
    }

    这个方法就进行了抛出异常,内部不进行处理,而进行抛出,让调用者自己处理异常.

    异常分类

    异常分为俩种:

    1、运行时异常:是RuntimeException的子类,比如NullPointException(空指针异常)与ArrayIndexOutOfBoundException异常类型

      当方法中抛出运行时异常时,方法定义中不需要throws声明抛出异常的类型,调用者不需要处理此异常,需要程序人员修改源代码.

    2、非运行时异常:如果出现了非运行时异常就必须进行处理,也就是必须进行抛出处理或是捕获处理,否则编译器会报错.

    运行时异常例子:

        public static int demomo(int a,int b) {//当方法内抛出的是运行时异常的时候,方法声明 
            if (b==0)
            {
                //异常的分类 可以分成运行时异常和非运行时异常 非运行时异常出现时,必须先处理异常,否则不能运行,编译器会报错.
                //当方法抛出运行时异常的时候,方法定义中无须throws声明,调用者无须去处理此异常,运行时异常一旦发生,需要程序人员修改源代码
                throw new     ArithmeticException("除数为0");//这个异常类型就属于运行时异常,所以这个方法声明不用加throws来声明抛出异常类型
                //throw是用于方法内部用于抛出一个异常的,而throws是用于方法声明上的,说明抛出的异常类型
                //而throw后面只能有一个异常对象,throws后面一次能够声明多个异常类型.
            }
            
            
            return a/b;
        
    }

    自定义异常

    虽然java的jdk中定义了许许多多的异常类,但是有时候还是需要用到自定义异常类

    java中所有异常类都是继承于Throwable,自定义类也一样,这样自定义类才能被throw抛出.

    每个异常中都调用了父类的构造方法,把异常描述信息传递给了父类,让父类帮用户进行异常信息的封装.

    语法:

    Class 异常名 extends Exception //继承RuntimeException 运行时异常
    {
      public 异常名(){//无参构造方法
     }
      public 异常名(String s){//有参构造方法,s为该异常的详细信息
    
      super(s);//将详细信息传递给父类封装
     }
    }

    异常在重写之中的运用

    1、子类覆盖父类的方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明异常.

    2、当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集.

    3、当被覆盖的方法没有异常声明时,子类覆盖时无法声明异常.

    4、父类中没有声明异常,而实现的子类覆盖方法发生了异常,无法进行throws声明,只能catch捕获处理,如果问题处理不了,catch中继续使用RuntimeException子类型的异常抛出.

    课后习题1、异常与错误的区别是什么?

      异常是程序在编译、运行期间发生的某种异常(Exception),若不处理异常,程序会结束运行

      错误是程序在运行期间发生的某种错误(Error)、程序将会结束运行,Error错误发生往往都是系统级别的问题,是jvm所在系统发生并反馈给jvm的.

    2、异常有哪几类别?

      有俩种,分为运行时异常和非运行时异常.非运行时异常发生的时候,必须要进抛出或捕获处理,否则编辑器会报错,

    而运行时异常,调用者不需要处理此异常,需要程序人员修改源代码.方法抛出运行时异常时.方法定义无须throws声明抛出异常类型

    3、异常常用的有哪几种处理方式?

      常用的有捕获处理和抛出处理

  • 相关阅读:
    scrapy爬虫框架入门教程
    wing IDE破解方法
    python网络画图——networkX
    Flask Web Development —— Web表单(上)
    pandas聚合和分组运算——GroupBy技术(1)
    Python自然语言工具包(NLTK)入门
    python & pandas链接mysql数据库
    Win10家庭版怎么开启Administrator超级管理员帐户
    Echars保存图片
    Windowserver2008R2安装IIS环境
  • 原文地址:https://www.cnblogs.com/youjunhui/p/14905218.html
Copyright © 2011-2022 走看看