欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Java第8章异常处理与断言.ppt

    • 资源ID:6510072       资源大小:230.50KB        全文页数:75页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java第8章异常处理与断言.ppt

    第8章异常处理与断言,内容提要,异常是在程序运行过程中产生的使程序终止正常运行的事件,是一种特殊的运行对象。,本章要点,本章首先介绍什么是异常、异常的类型以及如何处理异常,其中包括运行时异常和非运行时异常、使用try-catch处理异常、声明方法抛出异常、try-with-resources语句的使用以及创建自定义的异常。最后,简单介绍了有关断言的概念。,8.1 异常与异常类,8.1.1 异常的概念8.1.2 Throwable类及其子类,8.1.1 异常的概念,所谓异常(exception)是在程序运行过程中产生的使程序终止正常运行的错误对象。如数组下标越界、整数除法中零作除数、文件找不到等都可能使程序终止运行。为了理解异常的概念,首先看下面的程序。,8.1.1 异常的概念,程序8.1 NullPointerDemo.java,public class NullPointerDemo public static void main(String args)Circle circle=null;System.out.println(circle.area();System.out.println(Program finished.);,该程序编译不会发生错误,可以生成NullPointerDemo.class字节码文件,但运行时结果如下:at NullPointerDemo.main(NullPointerDemo.java:4),8.1.1 异常的概念,该输出内容说明程序发生了异常,第一行给出了异常名称,第二行给出了异常发生的位置。Java语言规定当某个对象的引用为null时,调用该对象的方法或使用对象时就会产生NullPointerException异常。该程序中当调用circle的area()方法时,运行时系统产生了一个NullPointerException异常类对象并抛出,运行时系统就在产生异常对象的方法中寻找处理该异常对象的代码,若有则进入异常处理的代码,若没有(如本程序),运行时系统继续将异常对象抛给调用该方法的方法。由于main()方法是由JVM调用的,所以将异常抛给了JVM,JVM在标准输出设备上输出异常的名称。,8.1.1 异常的概念,再看下面一个程序,该程序试图从键盘上输入一个字符,然后输出。程序8.2 InputChar.java import java.io.*;public class InputChar public static void main(String args)System.out.print(Input a char:);char c=(char)System.in.read();System.out.println(c=+c);,8.1.1 异常的概念,当编译该程序时会出现下列编译错误:Unhandled exception type IOException上述编译错误说明程序没有处理IOException异常,该异常必须捕获或声明抛出,同时编译器指出了需要捕获异常的位置。出现上述编译错误的原因是,read()方法在定义时声明抛出了IOException异常,因此程序中若调用该方法必须声明抛出异常或捕获异常。,8.1.2 Throwable类及其子类,Java语言的异常处理采用面向对象的方法,为各种异常建立了类层次。Java异常都是Throwable类的子类对象,Throwable类是Object类的直接子类,它定义在java.lang包中。Throwable类有两个子类一个是Error类另一个是Exception类,这两个子类又分别有若干个子类。,8.1.2 Throwable类及其子类,1.Error类Error类描述的是系统内部错误,这样的错误很少出现。如果发生了这类错误,则除了通知用户及终止程序外,几乎什么也不能做,程序中一般不对这类错误处理。Exception类图8.1给出了Exception类及其常见子类的层次结构。Exception类的子类一般又可分为两种类型:运行时异常和非运行时异常。,8.1.2 Throwable类及其子类,图8.2 RuntimeException类及其子类,图8.1 Exception类及其子类的层次,8.1.2 Throwable类及其子类,(1)运行时异常RuntimeException类及其子类异常称为运行时异常。常见的运行时异常如图8.2所示。运行时异常是在程序运行时检测到的,可能发生在程序的任何地方且数量较大,因此编译器不对运行时异常(包括Error类的子类)处理,这种异常又称为免检异常(unchecked exception)。但程序运行时发生这种异常时运行时系统会把异常对象交给默认的异常处理程序,在控制台显示异常的内容及发生异常的位置。程序8.1中的异常NullPointerException就是运行时异常。,8.1.2 Throwable类及其子类,下面介绍几种常见的运行时异常。NullPointerException 空指针异常,即当某个对象的引用为null时调用该对象的方法或使用对象时就会产生该异常,如:int a=null;a0=0;/该语句发生异常ArithmeticException 算术异常,在做整数的除法或整数求余运算时可能产生的异常,它是在除数为零时产生的异常。int a=5;int b=a/0;/该语句发生异常 注意:浮点数运算不会产生该类异常。如,1.0/0.0的结果为Infinity。,8.1.2 Throwable类及其子类,ClassCastException 对象转换异常,Java支持对象类型转换,若不符合转换的规定,则产生类转换异常,例如:Object o=new Object();String s=(String)o;/该语句发生异常ArrayIndexOutOfBoundsException 数组下标越界异常,当引用数组元素的下标超出范围时产生的异常,例如:int a=new int5;a5=10;/该语句发生异常 因为定义的数组a的长度为5,不存在a5这个元素,因此发生数组下标越界异常。,8.1.2 Throwable类及其子类,NumberFormatException 数字格式错误异常。在将字符串转换为数值时,如果字符串不能正确转换成数值则产生该异常,例如:double d=Double.parseDouble(5m7.8);/该语句发生异常 异常的原因是字符串5m7.8不能正确转换成double型数据。,注意:尽管对运行时异常可以不处理,但程序运行时产生这类异常,程序也不能正常结束。为了保证程序正常运行,要么避免产生运行时异常,要么对运行时异常进行处理。,8.1.2 Throwable类及其子类,(2)非运行时异常 除RuntimeException类及其子类以外的类称为非运行时异常,有时也称为必检异常(checked exception)。对这类异常,程序必须捕获或声明抛出,否则编译不能通过。程序8.2中的异常IOException就是非运行时异常。再比如,若试图使用Java命令运行一个不存在的类,则会产生Class NotFoundException异常,若调用了一个不存在的方法,则会产生NoSuchMethod Exception异常。,8.2 异常处理机制,8.2.1 异常的抛出与捕获8.2.2 try-catch-finally语句8.2.3 用catch捕获多个异常8.2.4 声明方法抛出异常8.2.5 用throw语句抛出异常8.2.6 try-with-resources语句,8.2 异常处理机制,异常处理可分为下面几种:使用try-catch-finally捕获并处理异常;通过throws子句声明抛出异常;用throw语句抛出异常;使用try-with-resources管理资源。,8.2.1 异常的抛出与捕获,在Java程序中,异常都是在方法中产生的。方法运行过程中如果产生了异常,在这个方法中就生成一个代表该异常类的对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。生成异常对象并把它交给运行时系统的过程称为抛出异常。运行时系统在方法的调用栈中查找,从产生异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止,这一过程称为捕获异常。,8.2.1 异常的抛出与捕获,方法调用与回溯如图8.3所示。,图8.3 方法调用与 回溯示意图,这里main()方法调用了methodA()方法,methodA()方法调用了methodB()方法,methodB()方法调用了methodC()方法。假如在methodC()方法发生异常,运行时系统首先在该方法中寻找处理异常的代码,如果找不到,运行时系统将在方法调用栈中回溯,把异常对象交给methodB()方法,如果methodB()方法也没有处理异常代码,将继续回溯,直到找到处理异常的代码。最后,如果main()方法中也没有处理异常的代码,运行时系统将异常交给JVM,JVM将在控制台显示异常信息。,8.2.2 try-catch-finally语句,在Java程序中捕获并处理异常最常用的方法是用try-catch-finally语句,该结构的一般格式为:try/需要处理的代码 catch(ExceptionType1 exceptionObject)/异常处理代码 catch(ExceptionType2 exceptionObject)/异常处理代码finally/最后处理代码,8.2.2 try-catch-finally语句,说明:(1)try块将程序中可能产生异常的代码段用大括号括起来,该块内可能抛出一种或多种异常。(2)catch块用来捕获异常,括号中指明捕获的异常类型及异常引用名,类似于方法的参数,它指明了catch语句所处理的异常。大括号中是处理异常的代码。catch语句可以有多个,用来处理不同类型的异常。,注意:若有多个catch块,异常类型的排列顺序必须按照从特殊到一般的顺序,即子类异常放在前面,超类异常放在后面,否则产生编译错误。,8.2.2 try-catch-finally语句,当try块中产生异常,运行时系统从上到下依次检测异常对象与哪个catch块声明的异常类相匹配,若找到匹配的或其父类异常,既进入相应catch块处理异常,catch块执行完毕说明异常得到处理。(3)finally块是可选项。异常的产生往往会中断应用程序的执行,而在异常产生前,可能有些资源未被释放。有时无论程序是否发生异常,都要执行一段代码,这时就可以通过finally块实现。无论异常产生与否finally块都会被执行。即使是使用了return语句,finally块也要被执行,除非catch块中调用了System.exit()方法终止程序的运行。,8.2.2 try-catch-finally语句,另外需要注意,一个try块必须有一个catch块或finally块,catch块或finally块也不能单独使用,必须与try块搭配使用。下面使用try-catch结构捕获并处理一个ArithmeticException异常。,8.2.2 try-catch-finally语句,程序8.3 DivideDemo.javapublic class DivideDemopublic static void main(String args)int a=5;tryint b=a/0;System.out.println(b=+b);catch(ArithmeticException e)e.printStackTrace();System.out.println(a=+a);,8.2.2 try-catch-finally语句,程序运行结果为:java.lang.ArithmeticException:/by zero at Demo.main(Demo.java:5)a=5 从上述结果可以看到,程序运行中发生的异常得到了处理,接下来程序继续运行。程序中调用了异常对象的printStackTrace()方法,它从控制台输出异常栈跟踪。从栈跟踪中我么可以了解到发生的异常类型和发生异常的源代码的行号。,8.2.2 try-catch-finally语句,在异常类的根类Throwable中还定义了其他方法,如下所示:public void printStackTrace():在标准错误输出流上输出异常调用栈的轨迹。public String getMessage():返回异常对象的细节描述。public String getLocalizedMessage():返回异常对象的针对特定语言的细节描述。public void printStackTrace(PrintStream s):在指定输出流上输出异常调用栈的轨迹。,8.2.2 try-catch-finally语句,public void printStackTrace(PrintWriter s):在指定输出流上输出异常调用栈的轨迹。public String toString():返回异常对象的简短描述,是Object类中同名方法的覆盖。这些方法被异常子类所继承,可以调用异常对象的方法获得异常的有关信息,这可使程序调试方便。有关其他方法的详细内容,请参阅Java API文档。下面是对程序8.2的修改,使用try-catch结构捕获异常。,8.2.2 try-catch-finally语句,程序8.4 InputCharDemo.javaimport java.io.*;public class InputCharDemo public static void main(String args)System.out.print(请输入一个字符:);try char c=(char)System.in.read();System.out.println(c=+c);catch(IOException e)e.printStackTrace();,8.2.2 try-catch-finally语句,注意:catch块中的异常可以是超类异常,另外catch块中可以不写任何语句,只要有一对大括号,系统就认为异常被处理了,程序编译就不会出现错误,编译后程序正常运行。catch块内的语句只有在真的产生异常时才被执行。下面程序涉及多个异常的捕获和处理。,8.2.2 try-catch-finally语句,程序8.5 MultiExceptionDemo.java,程序的输出如下:无异常发生.执行finally块:0捕获到:/by zero执行finally块:1捕获到:Exception:4执行finally块:2,8.2.3 用catch捕获多个异常,如前所述,一个try语句后面可以跟两个或多个catch语句。虽然每个catch语句经常提供自己的特有的代码序列,但是有时捕获异常的两个或多个catch语句可能执行相同的代码序列。现在可以使用JDK 7提供的一个新功能,用一个catch语句处理多个异常,而不必单独捕获每个异常类型,这就减少了代码重复。要在一个catch语句中处理多个异常,需要使用“或”运算符(|)分隔多个异常。下面的程序演示了捕获多个异常的方法。,8.2.3 用catch捕获多个异常,程序8.6 MultiCatchDemo.java,8.2.3 用catch捕获多个异常,程序运行当尝试除以0时,将产生一个ArithmeticException错误。当尝试越界访问letter数组时,将产生一个ArrayIndex OutOfException错误,两个异常被同一个catch语句捕获。注意,多重捕获的每个形参隐含地为final,所以不能为其赋新值。,8.2.4 声明方法抛出异常,所有的异常都产生在方法(包括构造方法)内部的语句。有时方法中产生的异常不需要在该方法中处理,可能需要由该方法的调用方法处理,这时可以在声明方法时用throws子句声明抛出异常,将异常传递给调用该方法的方法处理。声明方法抛出异常的格式如下:returnType methodName(paramlist)throws ExceptionList/方法体,8.2.4 声明方法抛出异常,按上述方式声明的方法,就可以对方法中产生的异常不作处理,若方法内抛出了异常,则调用该方法的方法必须捕获这些异常或者再声明抛出。上面的例子是在method()方法中处理异常,若不在该方法中处理异常,而由调用该方法的main()方法处理,程序修改如下。,8.2.4 声明方法抛出异常,程序8.7 ThrowsExceptionDemo.java,该程序的输出结果为:,8.2.4 声明方法抛出异常,注意:对于运行时异常可以不做处理,对于非运行时异常必须使用try-catch结构捕获或声明方法抛出异常。前面讲到子类可以覆盖超类的方法,但若超类的方法使用throws声明抛出了异常,子类方法也可以使用throws声明异常。但是要注意,子类方法抛出的异常必须是超类方法抛出的异常或子异常。,8.2.4 声明方法抛出异常,class AA public void test()throws IOException System.out.println(In AAs test();class BB extends AA public void test()throws FileNotFoundException/允许 System.out.println(In BBs test();class CC extends AA public void test()throws Exception/错误 System.out.println(In CCs test();,8.2.4 声明方法抛出异常,代码中BB类的test()方法是对AA类test()方法的覆盖,它抛出了FileNotFoundException异常,因为该异常是 IOException 异常类的子类,这是允许的。而在CC类的test()中抛出了Exception异常,该异常是IOException 异常类的父类,这是不允许的,不能通过编译。,8.2.5 用throw语句抛出异常,到目前为止,处理的异常都是由程序产生的,并由程序自动抛出,然而也可以创建一个异常对象,然后用throw语句抛出,或者将捕获到的异常对象用throw语句再次抛出,throw语句的格式如下:throw throwableInstance;throwableInstance可以是用户创建的异常对象,也可以是程序捕获到的异常对象,该实例必须是Throwable类或其子类的实例,请看下面例子。,8.2.5 用throw语句抛出异常,程序8.9 ThrowExceptionDemo.javaimport java.io.IOException;public class ThrowExceptionDemopublic static void method()throws IOException try throw new IOException(file not found);catch(IOException e)System.out.println(caught inside method);throw e;/将捕获到的异常对象再次抛出,8.2.5 用throw语句抛出异常,public static void main(String args)try method();catch(IOException e)System.out.println(recaught:+e);,8.2.5 用throw语句抛出异常,程序的输出结果为:caught inside methodrecaught:java.io.IOException:file not found上述程序在method()方法中try块中用new创建一个异常对象并将其抛出,随后在catch块中捕获到该异常,然后又再次将该异常抛给main()方法,在main()方法的catch块中捕获并处理了该异常。请注意,该程序在method()方法需使用throws声明方法抛出IOException异常,因为该异常是非运行时异常,必须捕获或声明抛出。在main()方法也必须使用try-catch捕获和处理异常。,8.2.6 try-with-resources语句,Java程序中经常需要创建一些对象(如I/O流、数据库连接),这些对象在使用完后需要关闭。忘记关闭文件可能导致内存泄露,并引起其他问题。在JDK 7之前,通常使用finally语句来确保一定会调用close()方法:try/打开资源 catch(Exception e)finally/关闭资源,8.2.6 try-with-resources语句,如果在调用close()方法也可能抛出异常,那么也要处理这种异常。这样编写的程序代码会变得冗长。例如,下面是打开一个数据库连接的典型代码:Connection connection=null;try/创建连接对象并执行操作catch(Exception e)finally if(connection!=null)try connection.close();catch(SQLException e),8.2.6 try-with-resources语句,可以看到,为了关闭连接资源要在finally块中写这些代码,如果在一个try块中打开多个资源,代码会更长。JDK 7提供的自动关闭资源的功能为管理资源(如文件流、数据库连接等)提供了一种更加简便的方式。这种功能是通过一种新的try语句实现的,叫try-with-resources,有时称为自动资源管理。try-with-resources的主要好处是可以避免在资源(如文件流)不需要时忘记将其关闭。,8.2.6 try-with-resources语句,try-with-resources语句的基本形式如下:try(resource-specification)/使用资源 这里,resource-specification是声明并初始化资源(如文件)的语句,它包含变量声明,用被管理的对象的引用初始化该变量。这里可以创建多个资源,用分号分隔即可。当try块结束时,资源会自动释放。,8.2.6 try-with-resources语句,如果是文件,文件将被关闭,因此不需要显式调用close()方法。try-with-resources语句也可以不包含catch语句和finally语句。,8.2.6 try-with-resources语句,并非所有的资源都可以自动关闭。只有实现了java.lang.AutoCloseable接口的那些资源才可自动关闭。该接口是JDK 7新增的,它定义了close()方法。接口继承了AutoCloseable接口。这两个接口被所有的流类实现,包括FileInputStream和FileOutputStream。因此,在使用流(包括文件流)时,可以使用try-with-resources语句。下面的例子演示了try-with-resources语句的使用。,8.2.6 try-with-resources语句,程序8.10 TryWithResources.java,8.2.6 try-with-resources语句,程序定义了Door类和Window类,它们都实现了java.langAutoClosable接口的close()方法。此外,还定义了open()方法,在open()方法中使用throw抛出了异常。在程序的main()方法中使用了try-with-resources语句创建了door对象和window对象,这两个对象就是可自动关闭的资源。在调用door.open()方法时抛出异常,程序控制转到异常处理代码,在此之前,程序调用两个资源的close()方法将door和window关闭,然后才处理异常。,8.3 自定义异常类,尽管Java已经预定义了许多异常类,但有时还需要定义自己的异常,这时只需要继承Exception类或其子类就可以了。程序8.11 MyException.java public class MyException extends Exception private int num;MyException(int a)num=a;public String toString()return MyException+num+;,8.3 自定义异常类,下面的程序中使用了自定义的类MyException程序8.12 ExceptionExample.javapublic class ExceptionExample static void makeexcept(int a)throws MyException(called makeexcept(+a+);if(a=0)throw new MyException(a);System.out.println(exit without exception);,8.3 自定义异常类,public static void main(String args)try makeexcept(5);makeexcept(0);catch(MyException e)System.out.println(caught:+e);,8.3 自定义异常类,程序的输出为:called makeexception(5)exit without exceptioncalled makeexception(0)caught:MyException0,8.4 断言机制,断言是Java 1.4版新增的一个特性,并在该版本中增加了一个关键字assert。断言功能可以被看成是异常处理的高级形式。所谓断言(assertion)是一个Java语句,其中指定一个布尔表达式,程序员认为在程序执行时该表达式的值应该为true。系统通过计算该布尔表达式执行断言,若该表达式为false系统会报告一个错误。通过验证断言是true,能够使程序员确信程序的正确性。,8.4.1 断言概述,断言是通过assert关键字来声明的,断言的使用有两种格式:assert expression;assert expression:detailMessage;在上述语句中,expression为布尔表达式,detailMessage是基本数据类型或Object类型的值。当程序执行到断言语句时,首先计算expression的值,如果其值为true,什么也不做,如果其值为false,抛出AssertionError异常。,8.4.1 断言概述,AssertionError类有一个默认的构造方法和7个重载的构造方法,它们有一个参数,类型分别为:int、long、float、double、boolean、char和Object。对于第一种断言语句没有详细信息,Java使用AssertionError类默认的构造方法。对于第二种带有一个详细信息的断言语句,Java使用AssertionError类的与消息的数据类型匹配的构造方法。由于AssertionError类是Error类的子类,当断言失败时(expression的值为false),程序在控制台显示一条消息并终止程序的执行。下面是一个使用断言的例子。,8.4.1 断言概述,程序8.13 AssertionDemo.javapublic class AssertionDemo public static void main(Stringargs)int i;int sum=0;for(i=0;i 10,8.4.1 断言概述,程序中语句assert i=10;断言i的值为10,如果i的值不为10将抛出AssertionError异常。语句assert sum 10断言sum大于10且小于50,如果为false,将抛出带有消息sum is+sum的AssertionError异常。假如现在错误地输入了i 100而不是i 10,就会抛出下面的AssertionError异常:at AssertionDemo,main(AssertionDemo.java:8)假如将sum=sum+i 错误地输入了sum=sum+1,就会抛出下面的AssertionError异常:Exception in thread“main”java.lang.AssertError:sum is 10at AssertionDemo,main(AssertionDemo.java:9),8.4.2 启动和关闭断言,编译带有断言的程序与一般程序相同,如下所示:D:study javac AssertionDemo.java默认情况下,断言机制在运行时是关闭的,要打开断言功能,在运行程序时需要使用 enableassertions或-ea选项,例如:D:study java ea AssertionDemo断言还可以在类的级别或包的级别打开或关闭。关闭断言的选项为-disableassertions或-da。例如,下面的命令在包package1的级别打开断言,而在Class1类上关闭断言:D:study java ea:package1 da:Class1 AssertionDemo。,8.4.3 何时使用断言,断言的使用是一个复杂的问题,因为这将涉及程序的风格、断言运用的目标、程序的性质等。通常来说,断言用于检查一些关键的值,并且这些值对整个应用程序或局部功能的实现有较大影响,并且当断言失败,这些错误是不容易恢复的。以下是一些使用断言的情况,它们可以使Java程序的可靠性更高。,8.4.3 何时使用断言,1.检查控制流在ifelse和switchcase结构中,可以在不应该发生的控制支流上加上assert false语句。如果这种情况发生了,断言就能够检查出来。例如,假设x的值只能取1、2或3,可以编写下面的代码:switch(x)case 1:;case 2:;case 3:;default:assert false:x value is invalid:+x;,8.4.3 何时使用断言,2.检查前置条件(precondition)在private修饰的方法前检查输入参数是否有效。对于一些private方法,如果要求输入满足一定的条件,可以在方法的开始处使用assert进行参数检查。对于public方法一般不使用assert进行检查,因为public方法必须对无效的参数进行检查和处理。例如,某方法可能要求输入的参数不能为null,那么就可以在方法的开始加上下面语句:assert param!=null:parameter is null in the method;,8.4.3 何时使用断言,3.检查后置条件(postcondition)在方法计算之后检查结果是否有效。对于一些计算方法,运行完成后,某些值需要保证一定的性质,这时可以通过assert进行检查。例如,对一个计算绝对值的方法就可以在方法的结束处使用下面语句进行检查:assert value=0:Value should be bigger than 0:+value;通过这种方式就可以对方法计算的结果进行检查。,8.4.3 何时使用断言,4.检查程序不变量有些程序中,存在一些不变量,在程序的运行过程中这些变量的值是不变的。这些不变量可能是一个简单表达式,也可能是一个复杂表达式。对于一些关键的不变量,可以通过assert进行检查。例如,在一个财务系统中,公司的收入和支出必须保持一定的平衡,这时就可以编写一个表达式检查这种平衡关系,如下所示:private boolean isBalance(),8.4.3 何时使用断言,在这个系统中,在一些可能影响这种平衡关系的方法的前后,就可以加上assert断言:assert isBalance():balance is destroyed;,8.4.4 一个使用断言的示例,下面定义的ObjectStack类使用对象数组实现一个简单的栈类,在push()、pop()和topValue()方法中使用了断言。程序8.14 ObjectStack.java,8.4.4 一个使用断言的示例,该程序的push()方法、pop()方法和topValue()方法中使用了断言。3个断言的含义是在对象入栈时要求栈顶指针top小于栈的大小size,在对象出栈和取栈顶元素时要求栈不为空(!isEmpty())。程序中注释掉的两行都将引起断言失败,带-ea选项执行程序时将抛出AssertionError异常,并显示断言失败的信息。,8.5 小 结,异常是程序运行中造成程序终止的错误对象。在Java语言中有两种类型的异常:运行时异常非运行时异常对运行时异常可以不处理,但程序运行若产生该类异常,运行时系统同样抛出。对非运行时异常,要求必须捕获或声明抛出。,8.5 小 结,对异常若不加处理,程序就会终止运行。异常处理有多种方法:使用try-catch-finally捕获并处理异常使用throws声明方法抛出异常使用throw可以明确抛出异常使用try-with-resources自动关闭资源,8.5 小 结,根据需要可以定义自己的异常类,这需要继承Exception类或其子类。断言是Java的一个语句,它用来对程序运行状态进行某种判断。断言包含一个布尔表达式,在程序运行中它的值应该为true。断言用于保证程序的正确性,避免逻辑错误。,预习,第9章 Java 输入输出,

    注意事项

    本文(Java第8章异常处理与断言.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开