JAVA程序设计基础第4章异常处理和常用系统类.ppt

上传人:max****ui 文档编号:6360960 上传时间:2020-02-23 格式:PPT 页数:72 大小:397.81KB
返回 下载 相关 举报
JAVA程序设计基础第4章异常处理和常用系统类.ppt_第1页
第1页 / 共72页
JAVA程序设计基础第4章异常处理和常用系统类.ppt_第2页
第2页 / 共72页
JAVA程序设计基础第4章异常处理和常用系统类.ppt_第3页
第3页 / 共72页
点击查看更多>>
资源描述
第4章异常处理和常用系统类 4 1异常处理机制4 2String类和StringBuffer类4 3AWT4 4Javaapplet 4 1异常处理机制 4 1 1什么是异常用任何一种计算机语言设计的程序在运行时都可能出现各种错误 常见的错误如除数为0 文件不存在 文件不能打开 数组下标超过界限 内存不够用等 对于这种在运行中出现的错误 计算机系统中通常有两种处理办法 1 由计算机系统本身直接检测程序错误 遇到错误时使程序终止运行 这种处理方法的优点是使程序设计比较简单 但是 对程序错误一概地采用终止运行办法 显然过于简单化 因为有些情况下 完全可以通过其他途径保持程序继续运行 比如 由于文件名不符合要求而无法打开文件 那么 可以提示用户输入一个新的文件名 从而使程序继续往下运行 2 由程序员在程序设计中兼顾错误检测 错误信息显示和出错处理 这种处理方法的优点是减少了中途终止程序运行的可能性 但是 要求程序员在程序设计中不仅将精力用于正常处理过程 还要精心考虑错误检测和处理 这会使程序变得复杂 并且 这类错误检测往往是多数程序中重复甚至在一个程序中多次重复 而另一方面 如果程序中某处忽略了应有的检测 又将引起程序总体结果的错误 Java采用异常处理机制来处理程序运行中的错误 按照这种机制 将程序运行中的所有错误都看成一种异常 通过对语句块的检测 一个程序中所有的异常被收集起来放在程序的某一段中去处理 在Java系统中 专门设置了一个调用栈 此栈中装有指向异常处理方法的指针 在程序运行时 系统会把收集到的异常和异常处理指针所指的处理类型逐个比较 如果找到相符的类型 那么就转向相应的方法处理 如没有在调用栈中找到相应的类型指针 则终止程序运行 并显示解释信息 在Java程序中 异常一般由以下两种原因引起 1 程序中存在非法操作 最简单的例子就是除数为0的除法操作 这种原因常常是程序员出于无意或大意造成的 所以称为隐式异常 常见的隐式异常可以通过java lang包中的Throwable类的子类Error处理 2 程序员在程序中使用了throw语句引起的异常 这种异常是程序员出于某种考虑有意安排的 所以称为显式异常 在throw语句中 都会指出处理显式异常的对象 这些对象都是由java lang包的类Throwable的子类Exception再派生的子类生成的 每个对象完成对某种异常的处理功能 这些对象综合起来实现各种异常处理 比如Array IndexOutOfBoundsException子类处理数组越界异常 IOException子类处理输入输出异常 而ArithmeticException子类处理除数为0导致的算术异常等 4 1 2异常的层次结构4 1 3异常的处理4 1 4创建自己的异常 4 2String类和StringBuffer类 4 2 1String类1 String类的主要构造方法String类有多个构造方法 主要的有下列5个 String String charchars String charchars intstartIndex intnumChars String byteascii inthiByte String byteascii inthiByte intstartIndex intnumChars 第1个构造方法生成一个空串 第2个构造方法生成一个字符数组 第3个构造方法生成一个字符串 这个字符串是从字符数组chars 中提取的 具体讲 即从chars 数组的startIndex位置开始提取字符 共提取numChars个字符组成一个字符串 第4个构造方法是以字节数组的形式生成一个字符串 数组中存放字符串各字符对应的ASCII码 第5个构造方法也是从字节数组生成一个字符串 具体讲 就是以字节数组ascii 的startIndex处开始 共提取numChars个字符构成字符串 如为ASCII字符 则hiByte的值为0 例4 5 importjavax swing publicclassStringConstructors publicstaticvoidmain Stringargs charcharArray b i r t h d a y bytebyteArray byte n byte e byte w byte byte y byte e byte a byte r StringBufferbuffer Strings s1 s2 s3 s4 s5 s6 s7 output s newString hello buffer newStringBuffer WelcometoJavaProgramming s1 newString s2 newString s s3 newString charArray s4 newString charArray 6 3 s5 newString byteArray 4 4 s6 newString byteArray s7 newString buffer output s1 s1 ns2 s2 ns3 s3 ns4 s4 ns5 s5 ns6 s6 ns7 s7 JOptionPane showMessageDialog null output DemonstratingStringClassConstructors JOptionPane INFORMATION MESSAGE System exit 0 运行结果见图4 5 图4 5 程序分析 String类提供了9个构造函数 以便使用各种方法初始化String对象 例题共演示了7种 程序 s1 newString 实例化一个新的String对象 并使用String类的缺省构造函数将它赋给引用s1 新的String对象没有字符 即空串 长度为0 s2 newString s 例化一个新的String对象 并使用String类的拷贝构造函数 将它赋给引用s2 s被当作参数传送给构造函数 新的String对象包含了String对象s中的字符的拷贝 在大多数情况下 没有必要拷贝已有的String对象 String对象是不变的 一旦创建后就不能改变它们的内容 字符串 而且 如果有一个或多个引用指向某个String对象 垃圾收集器就不能回收该对象 也就是说 String引用既不能用于修改String对象 也不能删除String对象 这一点与C语言或C 语言是不同的 s3 newString charArray 实例化一个新的String对象 并使用以字符数组为参数的String类构造函数 将它赋给引用s3 新的String对象包含了数组中字符的拷贝 s4 newString charArray 6 3 实例化一个String对象 使用以一个字符数组和两个整数为参数的String类构造函数 将它赋给引用s4 第2个参数指定了在数组中拷贝字符的起始位置 offset 第3个参数指定了数组中拷贝字符的数目 count 新的String对象包含了数组中指定字符的拷贝 如果offset或count参数指定的所取元素超过了字符数组的界限 就会产生StringIndexOutOfBoundsException的例外处理 s5 newString byteArray 4 4 实例化一个新的String对象 使用以一个byte数组和两个整数为参数的String类构造函数 将它赋给引用s5 第2和第3个参数分别指定了offset和count 新的String对象包含了数组中指定byte的拷贝 如果offset或count参数指定的所取元素超过了byte数组的界限 就会产生一个StringIndexOutOfBoundsException的例外处理 s6 newString byteArray 实例化一个新的String对象 使用以一个byte数组为参数的String类构造函数 将它赋给引用s6 新的String对象包含了数组中byte的拷贝 s7 newString buffer 实例化一个新的String对象 使用以StringBuffer为参数的String类构造函数 将它赋给引用s7 StringBuffer是一个可动态改变大小和内容的字符串 新的String对象包含了StringBuffer中字符的拷贝 2 String类的length charAt和getChars方法下面的例子演示了String类的length charAt和getChars方法 它们分别用于确定String类的长度 取String某一指定位置的字符以及取String某一子串 3 String类的字符串比较例4 7 importjavax swing JOptionPane publicclassStringCompare publicstaticvoidmain Stringargs Strings1 s2 s3 s4 output s1 newString hello s2 newString goodbye s3 newString HappyBirthday s4 newString happybirthday output s1 s1 ns2 s2 ns3 s3 ns4 s4 n n if s1 equals hello output s1equals hello n elseoutput s1doesnotequal hello n if s1 hello output s1equals hello n elseoutput s1doesnotequal hello n if s3 equalsIgnoreCase s4 output s3equalss4 n elseoutput s3doesnotequals4 n output pareTo s2 is pareTo s2 pareTo s1 is pareTo s1 pareTo s1 is pareTo s1 pareTo s4 is pareTo s4 pareTo s3 is pareTo s3 n n if s3 regionMatches 0 s4 0 5 output First5charactersofs3ands4match n elseoutput First5charactersofs3ands4donotmatch n if s3 regionMatches true 0 s4 0 5 output First5charactersofs3ands4match elseoutput First5charactersofs3ands4donotmatch JOptionPane showMessageDialog null output DemonstratingStringClassConstructors JOptionPane INFORMATION MESSAGE System exit 0 4 在字符串中定位字符和子串5 从字符串中抽取子串 6 字符串连接publicStringconcat Stringst 可返回一个字符串 它将把参数str添加在原字符串的后面形成一个新的字符串 但在Java中 更多的是使用 来连接字符串 这里读者可能会产生一个小小的迷惑 因为前面我们讲过String对象是不能改变的 实际上 字符串的连接是由编译器利用StringBuffer的方法append来实现的 这在下面的章节中讲解 例4 10 importjavax swing publicclassStringConcat publicstaticvoidmain Stringargs Strings1 newString Happy s2 newString Birthday output output s1 s1 ns2 s2 output n nResultofs1 concat s2 s1 concat s2 output ns1afterconcatenation s1 JOptionPane showMessageDialog null output DemonstratingStringMethodconcat JOptionPane INFORMATION MESSAGE System exit 0 运行结果见图4 10 7 转化为字符串 图4 10 4 2 2StringBuffer类String类提供了很多处理字符串的功能 但是 一旦创建了字符串对象 它的内容就永远不会变 下面将讨论StringBuffer类的特点 这个类可以创建和操纵动态字符串 即可修改的字符串 每个StringBuffer都能够存储由它的容量所指定的一些字符 如果超过了StringBuffer的容量 容量就会自动地扩大以容纳多出来的字符 我们将看到 StringBuffer类还可用来实现用于字符串连接的运算符 String对象是常量字符串 StringBuffer对象是可修改的字符串 Java区分字符串和可修改的字符串是为了优化的目的 特别地 Java可以实现有关String对象的某些优化 例如多个引用共享一个String对象 因为它知道这些对象不会改变 注意 在选择是用String对象还是用StringBuffer对象来表示一个字符串时 如果该对象确实不会改变 则总是使用String对象 这样做可以改善性能 对String对象调用非String类的StringBuffer方法是一种语法错误 StringBuffer提供的方法有一些与String相同 有一些不同 最主要的方法有两组 一组是append 另一组是insert 4 3AWT 4 3 1AWT概述4 3 2AWT的特点4 3 3AWT应用 4 4Javaapplet 4 4 1Javaapplet的特点Javaapplet与Java应用程序不同 它们的不同之处有以下几个方面 1 Java应用程序中 必须有一个main 方法 Main 方法是程序的入口 当程序开始运行时 解释器首先查找main 方法并执行 而Javaapplet中则不需要main 方法 它必须嵌入HTML文件中 由支持Javaapplet的浏览器运行 2 Java应用程序可以独立运行 而Javaapplet不能独立运行 需要依赖于网络浏览器 3 Java应用程序所实现的功能是完全的 不需依赖于其他程序 而Javaapplet实现的功能是不完全的 它必须借助于浏览器中预先设计好的功能和已有的图形界面 Javaapplet只需接收浏览器发送给它的消息 并及时做出响应 4 Java应用程序中的所有方法的使用是通过调用实现的 可以人为控制 而Javaapplet中有一部分方法是固定的 只能由浏览器在特定时刻和场合调用 不能人为控制 但可以重载 4 4 2Javaapplet的程序结构Javaapplet的一般程序结构如下 importjava applet importjava awt publicclass子类名extendsApplet 定义Applet类的子类 publicvoidinit 方法体 初始化方法publicvoidstart 方法体 开始执行方法publicvoidstop 方法体 停止执行方法publicvoiddestroy 方法体 退出方法publicvoidpaint Graphicsg 方法体 绘画方法 从Javaapplet程序结构看出 Javaapplet由若干类组成 无需main 方法 但必须有且仅有一个主类 该类是Applet类的子类 且被声明为public 程序被保存时 程序名必须命名为主类名 即程序名与主类名完全相同 后缀为 java 主类中定义了init start stop destroy 和paint 方法 这些方法是从Applet中继承的 有固定的含义 由浏览器在时机成熟时自动执行 4 4 3Applet的主要方法在浏览器中运行Applet程序 从运行开始到运行结束 Applet程序需经历4个状态 分别是初始状态 运行状态 停止态和消亡状态 这4种状态分别对应Applet的4个主要方法 init start stop 和destroy 对于支持Java的浏览器 如果在运行一个HTML文件时发现该文件包含Applet程序 浏览器就会生成该Applet的一个实例 并调用init 方法 进入初始化状态 在该状态下完成Applet的一些初始化操作 初始化完成后 浏览器接着调用start 方法 进入运行状态 真正开始执行Applet 在该状态下Applet通常会启动一些线程执行各种任务 当退出当前主页时 浏览器调用stop 方法终止在运行状态下启动的线程 进入停止状态 当用户退出浏览器时 浏览器首先调用Applet的stop 方法 停止Applet的执行 然后调用destroy 方法释放Applet占用的系统资源 进入消亡状态 下面具体介绍init start stop 和destroy 4种方法 1 Init 方法在Applet执行过程中 init 方法只执行一次 当浏览器第一次浏览含有Applet的Web页载入Applet时 就会执行init 方法 由于在Applet执行过程中 该方法只被执行一次 所以可以在init 方法中进行一些只需执行一次的初始化操作 如变量的初始化 设置Applet初始状态 载入图形或字体 获取HTML中Applet标记单元中设定的参数等 2 start 方法调用完init 方法 浏览器将调用start 方法启动Applet 和init 方法不同 在Applet的执行过程中 start 方法可被浏览器调用多次 在下列情况下 浏览器会调用start 方法 1 浏览器从图标状态恢复为窗口状态或缩放浏览器窗口时 2 Applet第一次载入时 3 离开该Web页后又再返回时 4 reload该页面时 在start 方法中可启动相关线程来控制Applet 给引入类对象发送消息 或以某种方式通知Applet开始运行 该方法是Applet的主体 3 stop 方法该方法与start 方法是相对应的 在Applet执行过程中 也会被浏览器调用多次 在下列情况下 浏览器会调用stop 方法 1 浏览器从图标状态恢复为窗口状态或缩放浏览器窗口时 2 离开Applet所在Web页时 3 reload该页面时 4 关闭该Web页时 5 从该Web页退出浏览器运行时 stop 方法可在适当时机挂起Applet 停止一些占用系统资源的工作 释放系统处理资源 以提高系统的运行速度 4 destroy 方法在彻底结束对该Web页的访问或退出浏览器时调用destroy 方法 卸载Applet 释放载入Applet时分配的系统资源 在Applet的执行过程中 destroy 方法只执行一次 destroy 方法是Applet类的类方法 只能用于Applet 可在该方法中执行释放系统资源的代码 但一般不需重写destroy 方法 因为Java运行系统本身会自动进行 垃圾 处理和内存管理 除非用了特殊的资源如创建的线程 注意 destroy 方法与stop 方法不同 除了上述4个方法外 Applet还提供一个非常重要的方法 paint Graphicsg 方法 该方法用于进行绘图的具体操作 但没有实现任何操作 用户可重写该方法 实现个性化的绘图操作 在Applet执行过程中 paint 方法可以被浏览器自动调用执行绘图操作 可调用多次 当调整浏览窗口大小 缩放浏览窗口 移动窗口或reload等需要重绘窗口时都会调用paint 方法 与其他4个方法不同的是 paint 中需传递一个参数 该参数是Graphics类的对象 由这个对象来完成具体的绘图操作 Graphics对象由浏览器自动创建并将其传送给paint 方法 注意 应在Applet中引入Graphics类的包或该类 importjava awt Graphics 例4 16 importjava applet importjava awt publicclassexample4 16extendsApplet privateintInitCount privateintStartCount privateintStopCount privateintDestroyCount privateintPaintCount publicexample4 16 InitCount 0 StartCount 0 StopCount 0 DestroyCount 0 PaintCount 0 publicvoidinit InitCount publicvoiddestroy DestroyCount publicvoidstart StartCount publicvoidstop StopCount publicvoidpaint Graphicsg PaintCount g drawString Paint 方法执行了 PaintCount 次 20 20 g drawString Init 方法执行了 InitCount 次 20 70 g drawString Start 方法执行了 StartCount 次 20 120 g drawString Stop 方法执行了 StopCount 次 20 170 g drawString Destroy 方法执行了 DestroyCount 次 20 220 4 4 4Javaapplet的运行Javaapplet程序不能独立运行 必须由浏览器来运行 因此我们需编写一个HTML文件 通过标记将applet程序编译生成的字节码文件嵌入HTML文件 通知浏览器来运行Javaapplet 如要运行例4 16 可编写如下的HTML文件 example4 16
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!