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

    第9章Java高级编程.ppt

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

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

    第9章Java高级编程.ppt

    学习导读 本章将介绍Java语言中的一些高级特性:异常处理、多线程机制、流式IO以及网络通信,其中每个部分都能扩展成一个专题。读者在本章学习到的只是其中很小的一部分,但是能够从中了解一些基本概念和基本操作,为今后的深入学习打下基础。异常处理提供对错误的捕捉和处理机制;多线程机制使得程序的多个子任务能够“同时”执行;流式IO提供了对输入输出的读写机制;网络通信特性允许Java程序通过Socket实现底层通信,并利用Java提供的扩展组件实现高层服务。,第九章 Java高级编程,教学重点与难点:,异常处理、多线程机制、流式IO以及网络通信的基本概念和模型异常的捕获和处理多线程的实现及Runnable接口的应用流式输入输出的操作、文件读写及随机访问基于Socket的面向连接的网络底层通信及高层服务,9.1 异常处理,在Java中,提供了错误捕捉和处理机制,即异常处理机制。在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误的方法抛出封装了错误信息的对象(异常)到其调用程序,发出已经发生问题的信号,然后立即退出;而且,程序并不在调用该方法的代码处继续执行,而是由异常处理机制开始搜索一个能够处理这种特定错误情况的异常处理器。,9.1.1 异常分类,Throwable类派生出两个分支:Error和Exception。Error类被认为是不能恢复的严重错误,如系统内部错误和资源耗尽错误等。不应该抛出这种类型的错误,而是让程序中断。Exception类定义可能遇到的轻微错误,分为派生自RuntimeException类的异常和非派生自RuntimeException类的异常。这时,可以写代码来处理异常并继续程序执行,而不是让程序中断。区分RuntimeException和非RuntimeException的规则是:编程错误导致RuntimeException,如被零除、数组越界访问、空指针访问等;而其他异常则是由于意外情况而发生的,如试图读取文件结尾以后的数据、试图打开错误的URL、试图根据并不代表已存在类的字符串来查找Class对象等。,9.1.2 方法如何抛出异常,/本方法从长度为2048字节的某文件中读入数据到字符串对象中。String readFile(BufferedReader in)throws EOFException.while(.)/ch为当前读入的字符。if(ch=-1)/文件尾;/当nlen,意味着还未将文件全部读入字符串,就遇到文件结束标志,视为异常情况。if(n len)throw new EOFException();/或者采用下面的方法:/if(n len)/EOFException readeof=new EOFException();/throw readeof;.return s;,9.1.3捕获及处理异常,try可能产生异常的代码/try块catch(ExceptionType1 e1)/要捕获的异常类型1对此异常的处理/异常处理1catch(ExceptionType2 e2)/要捕获的异常类型2对此异常的处理/异常处理2catch(ExceptionType3 e3)/要捕获的异常类型3对此异常的处理/异常处理3,【例9.1】捕获并处理异常 程序代码见ExceptionExample.java。运行结果如下:Caught the Exception!e.getMessage():I throw an Exception!,【例9.2】重新抛出异常 程序代码见RethrowException.java。运行结果如下:the original exception in f()Caught in mainException in thread main java.lang.Exception:thrown from f()at RethrowException.f(RethrowException.java:8)at RethrowException.main(RethrowException.java:14),9.1.4创建自己的异常类,我们可以创建自己的异常类,以便对特殊的异常进行处理。创建的方法很简单:继承现有的异常类。【例9.3】创建自己的异常类。程序代码见ExceptionInherit.java。运行结果如下:Throwing MyExceptionMyException:the second constructor!at ExceptionInherit.f(ExceptionInherit.java:19)at ExceptionInherit.main(ExceptionInherit.java:25)【例9.4】创建具有更多功能的异常类。程序代码见ExceptionInherit2.java。运行结果如下:Throwing MyException2e.value()=4MyException2:the third constructor!at ExceptionInherit2.f(ExceptionInherit2.java:29)at ExceptionInherit2.main(ExceptionInherit2.java:35),9.2 Java多线程机制,进程、线程示意图,【例9.5】未使用多线程技术的记数程序。当单击“Start”按钮时,屏幕上方的文本框开始递增记数,从0到49。在记数过程单击“Close”按钮不起作用,记数依然在继续;当记数到49时,程序退出。程序代码见Counter.java。运行结果如下:,9.2.1创建线程,创建线程:将需要独立运行的子任务代码放到从Thread类派生出来的类的run方法中。然后在主线程中原先调用该子任务的地方先创建一个该线程类的实例,再调用线程类中的start方法启动线程。【例9.6】使用线程技术的记数程序。在记数过程中,当单击“Close”按钮时,程序立刻会退出。程序代码见CounterThread.java。运行结果如下:,9.2.2 实现多个线程,在以上例子的基础上,创建多个记数线程同时记数。【例9.7】实现多个记数线程的记数程序。当多次单击“Add”按钮时,窗口中的文本框会依次增加,每个文本框都执行自己的记数功能。程序代码见CounterMultiThread.java。运行结果如下:,9.2.3 线程的状态,线程状态及状态转换示意图,9.2.4 Runnable接口,前面介绍了如何通过创建自己的线程类来实现多线程,即将线程类(Thread)与程序的主类(Main)分离。class CounterSubTask extends Thread.public void run().public class CounterMultiThreadpublic static void main(String args).如果CounterSubTask类,也就是run方法所在的类已经拥有另一个超类,那将无法继承Thread类,此时如何实现多线程呢?典型的情况是,对于一个GUI程序,需要从JFrame或JApplet类派生。这时,虽然不能继承Thread类,但是可以通过实现Runnable接口来实现多线程。,【例9.8】通过Runnable接口实现多个记数线程的Java小应用程序。程序代码见CounterThreadApplet.java。运行结果如下:,9.3 流式输入输出与文件处理,在Java中,应用程序所需要读入的数据和写出的数据是通过I/O操作实现的。这些读写数据的源或目的包括文件、内存、网络连接等,其中,最常用的是文件。Java中的输入输出流可以分为两大类:输入流和输出流。输入流是能够读取字节的对象,而输出流是能够写字节序列的对象。最初设计的输入输出类是面向字节流的,即能够支持8位的字节流,分别由派生自抽象类InputStream和OutputStream的类层次来表示。但是随着对国际化支持的需求出现,面向字节的流不能很好地处理使用Unicode(每个字符使用两个字节)的数据,因此引入了派生自抽象类Reader和Writer的类层次,用于读写双字节的Unicode字符,而不是单字节字符。,9.3.1 Java输入输出类库继承关系,面向字节流的输入输出类层次关系图,处理Unicode字符的输入输出类层次关系图,9.3.2基于标准输入输出的IO操作,在Java里,还提供了“标准输入流”和“标准错误输出流”,分别对应于System.in和System.err。System.out和System.err已经被封装成PrintStream对象,因此具有强大的输出功能;但是System.in却仍然是原始的InputStream,需要在使用的时候进行封装。【例9.9】标准输入输出。程序代码见StandardIO.java。运行结果如下:Enter String:abcdeAbcdeEnter an Integer:-12345-12345Enter a Double:-12345-12345.0,【例9.10】结构化数据输入输出和数据分隔。程序代码见TokenStandardIO.java。运行结果如下:The number 1 personEnter name,age,salary,married(optional),please separate fields by:张三:25:3000The number 2 personEnter name,age,salary,married(optional),please separate fields by:李四:35:10000:YThe number 3 personEnter name,age,salary,married(optional),please separate fields by:王大五:30:4000:FOutput the data of people:The number 1 personname:张三;age:25;salary:3000.0;married:FThe number 2 personname:李四;age:35;salary:10000.0;married:YThe number 3 personname:王大五;age:30;salary:4000.0;married:F,9.3.3文件读写及随机访问,文件是保存在磁盘等二级存储设备上的数据,由记录组成,文件中的一行可以看作是一条记录。对文件的读写和标准输入输出是十分类似的,需要注意的是要采用专门对文件操作的流,并应该在合适的时候关闭流,否则系统资源无法得到释放。对于输出流,如果不执行关闭流的操作,则缓冲区的数据将有可能没有写入文件,造成文件损坏。【例9.11】文件读写。将标准输入的数据写到文件中,然后再从文件中读取数据,并输出到标准输出。程序代码见FileRW.java。运行结果如下:,The number 1 personEnter name,age,salary,married(optional),please separate fields by:张三:25:3000The number 2 personEnter name,age,salary,married(optional),please separate fields by:李四:35:10000:YThe number 3 personEnter name,age,salary,married(optional),please separate fields by:王大五:30:4000:FPersonname=张三,age=25,salary=3000.0,married=FPersonname=李四,age=35,salary=10000.0,married=YPersonname=王大五,age=30,salary=4000.0,married=F同时,当前目录下应有文件“people.dat”,其内容为:3张三:25:3000.0:F李四:35:10000.0:Y王大五:30:4000.0:F,【例9.12】文件随机访问。先把定长的记录写入文件中,然后逆序读取并显示,在修改文件的最后一条记录后,再写入文件。程序代码见FileRandomRW.java。程序执行后,当前目录下应该有“peoplerandom.dat”文件,运行结果如下:原始数据:Personname=张三,age=25,salary=3000.0,married=FPersonname=李四,age=35,salary=10000.0,married=YPersonname=王大五,age=30,salary=4000.0,married=F修改后的记录Personname=王大五,age=30,salary=4500.0,married=F,9.3.4Java的文件管理,对于文件或目录的其他操作,如重命名、删除、列表显示等,需要使用Java的文件管理File类。在Java中,文件和目录都是用File对象来表示的,创建和区分方法:先创建一个File对象,并指定文件名或目录名,若指定文件名或目录名不存在,则File对象的新建并不会创建一个文件或目录;需要用createNewFile方法或mkdir方法来分别创建文件或目录。区分File对象代表的是文件还是目录,可以通过isFile方法和isDirectory方法来判断。File currentPath=new File(args0);/在指定目录新建temp目录的File对象。File tempPath=new File(currentPath,temp);tempPath.mkdir();/在指定目录下创建temp目录。/在temp目录下创建文件。File temp1=new File(tempPath,temp1.txt);temp1.createNewFile();,【例9.13】文件管理。先在指定目录下创建名为“temp”的子目录,在“temp”目录下创建两个文件:“temp1.txt”、“temp2.txt”,然后列表显示指定目录;重命名“temp1.txt”为“temp.txt”,然后列表显示“temp”目录;删除文件“temp2.txt”,然后列表显示“temp”目录。程序代码见FileDirectory.ava。运行命令:E:demojava FileDirectory运行结果如下:显示指定目录的内容1.Ppt2.Xls3.DocFileDirectory.javaFileDirectory.classE:demotemptemp1.txttemp2.txt更改文件名后,显示temp子目录的内容temp.txttemp2.txt删除文件后,显示temp子目录的内容temp.txt,9.4 Java网络通信,传统的网络编程是一项非常细节化的工作,程序员必须处理和网络有关的大量细节,如各种协议,甚至要理解网络相关的硬件知识。而Java则将底层的网络通信细节予以屏蔽,使得使用的编程模型是一个文件模型,也就是说,可以象操作流一样来操作网络数据传输。另外,由于在网络连接中,通常都需要一个服务器同时为多个客户端服务,因此Java的多线程机制也大派用场。,9.4.1网络基础知识及Java网络模型,Java网络模型图,9.4.2面向连接的流式套接字,【例9.14】具有“回显”功能的服务器端和客户端程序。服务器端的程序将等待客户端的输入,然后将客户端的输入回显给客户端,同时在服务器端的控制台输出。而客户端从控制台接收输入后,向服务器端发送输入,并接收服务器端的回显数据,然后显示在控制台。程序代码见EchoServer.java和EchoClient.java。服务器端程序运行结果如下:Started:ServerSocketaddr=0.0.0.0/0.0.0.0,port=0,localport=9999Connection accepted:Socketaddr=/127.0.0.1,port=1623,localport=9999Hello!Enter BYE to exit.Echo:abcEcho:cdeEcho:efgThe client entered BYE!Connection will be closed!,客户端程序运行结果如下:socket=Socketaddr=localhost/127.0.0.1,port=9999,localport=1623Enter a string,Enter BYE to exit!AbcEcho:abcCdeEcho:cdeEfgEcho:efgBYE,【例9.15】支持多客户端的“回显”服务器端程序。程序代码见EchoServerThread.java。我们先启动服务器端,然后启动两个客户端。服务器端程序运行结果如下:Started:ServerSocketaddr=0.0.0.0/0.0.0.0,port=0,localport=9999Connection 1 accepted:Socketaddr=/127.0.0.1,port=1656,localport=9999Hello!Enter BYE to exit.Connection 2 accepted:Socketaddr=/127.0.0.1,port=1657,localport=9999Hello!Enter BYE to exit.Echo 1:abcEcho 2:ABCEcho 2:CDEEcho 1:cdeEcho 2:EFGThe client 2 entered BYE!Connection 2 will be closed!Echo 1:efgEcho 1:hijkThe client 1 entered BYE!Connection 1 will be closed!,第一个客户端运行结果如下:socket=Socketaddr=localhost/127.0.0.1,port=9999,localport=1656Enter a string,Enter BYE to exit!abcEcho 1:abccdeEcho 1:cdeefgEcho 1:efghijkEcho 1:hijkBYE第二个客户端运行结果如下:socket=Socketaddr=localhost/127.0.0.1,port=9999,localport=1657Enter a string,Enter BYE to exit!ABCEcho 2:ABCCDEEcho 2:CDEEFGEcho 2:EFGBYE,9.4.3无连接的数据报,对于类似传输速度更重要的应用,使用无连接的数据报协议UDP,即“用户数据报协议”。UDP并不刻意追求数据包会完全发送出去,也不能担保它们抵达的顺序与它们发出时一样,因此,这是一种“不可靠协议”。由于其速度比TCP快得多,所以还是能够在很多应用中使用。Java对数据报的支持与它对TCP套接字的支持大致相同,使用DatagramSocket类来表示无连接的socket,接收和发送数据报。接收和要发送的数据报内容保存在DatagramPacket对象中。UDP也有自己的端口,和TCP端口是相互独立的。也就是说,可以在端口8080同时运行一个TCP和UDP服务程序,两者之间不会产生冲突。,9.4.4 Java访问网络资源,在因特网上,已经开发了许多服务,如WWW浏览、Email等,而Java也提供了相应的扩展组件,如对于Email应用,Java提供了JavaMail API,使用时只需要调用其提供的方法就可以完成如发送邮件的操作:Transport.send(message);在因特网上,我们使用通用资源定位符URL(Uniform Resource Locator)来查找资源。URL包含了用于查找某个资源的信息,如一张图片、一个文件等。URL资源可以包括很多种,如HTTP资源、FTP资源等。下面就是一个图像资源的URL,属于HTTP资源。http:/,【例9.16】从网络获取图像资源。程序代码见InternetAccess.java。程序运行结果如下:,本章小结,通过本章的学习,了解了Java异常处理、多线程机制、流式IO以及网络通信的基本概念和模型。在异常处理中,通过Java语言提供的先进的错误纠正与恢复机制,可以有效地增强代码的健壮程度,并使用尽可能精简的代码创建大型、可靠的应用程序,同时排除程序里那些不能控制的错误。Java强迫遵守违例所有方面的问题,所以无论库设计者还是客户程序员,都能够连续一致地使用它。使用多线程机制的主要目的是对大量任务进行有序的管理,从而可以通过“轻度”切换来更有效地利用计算机资源,或者对用户来说使用界面更加友好,相比进程之间的“重度”切换,效率得到很大提高。有效利用计算机资源的典型应用是在IO等候期间如何利用CPU;用户方面的界面友好性的典型体现是如何在一个长时间的数据下载过程中灵敏地对“停止”(stop)操作进行反应。,在流式输入输出中,Java提供了通过控制台、文件、内存块甚至因特网等多种不同数据源或目的进行不同方式访问的流库。通过对流过滤器的正确使用,将提供灵活的I/O操作。Java不仅提供了对文件的流式访问,而且提供了随机访问和文件管理。在网络通信中,Java不仅提供了面向连接和无连接数据报的底层通信,而且还提供了高层服务,如Email和WWW服务等。通过Java提供的网络功能,可以以流的方式来进行网络数据的传输,而且不需要关注连网的细节问题。,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开