《【教学课件】第9章Java高级编程.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第9章Java高级编程.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第9章 Java高级编程本章将简单介绍Java中的高级应用,包括异常处理、多线程机制、数据流及文件操作、网络编程、数据库操作五个方面。9.1 异 常 处 理在Java语言中,程序员可以在程序中定义异常处理段(exception handler)来捕获和处理异常,在异常发生的时候,一个代表该异常的对象会被创建,并在产生这个异常的方法中被引发。同时,这个方法可以选择自己处理异常,也可以抛出这个异常给别的方法处理。无论怎样,该异常都将被捕获并作出相应的处理。这样可以保证程序在出现了异常的情况下仍然梢约续的执行,不会影响到其他的部分的运转,提高了程序的健壮性。9.1.1 异常类的层次结构所有的异常类都
2、是java.lang.Throwable的子类,其层次关系如图所示。9.1.2 如何捕获异常在熟悉了异常的概念和分类后,就要介绍如何在程序中捕获异常。Java语言给程序员提供了trycatch代码段,用来捕获可能出现的异常。try意思就是看其代码段内部的代码是否会出现异常,catch则是当try中的代码段出现异常后,捕获异常,并作相应处理。trycatch使用的语法格式为:try 可能会出现异常的代码段;catch(异常类型名 处理该异常对象)异常处理代码段;9.1.3 如何抛出异常编写代码过程中,如果不想在这段代码中捕捉和处理一个可能出现的异常,那么就需要将这个异常传递出去,传递给调用它的方
3、法去处理该异常。这个时候就需要使用throw和throws语句:(1)throws语句:在方法声明中使用,抛出异常;(2)throw语句:在方法体内部使用,抛出异常。9.1.4 自定义异常前面两节介绍了,利用系统提供的标准异常类来捕获和处理异常。但如果碰到了可能出现的异常,却在标准异常类中并没有定义过的时候,就需要建立自己的异常类。建立自己的异常类,要做的只是根据需要,从Exception类或是从Exception类的子类中继承出需要的类。习惯上,会经常为每一个异常类,提供一个默认的和一个包含详细信息的构造器。需要注意的是,自定义异常类,必须由程序员使用throw语句抛出。9.1.5 使用fi
4、nally语句段在之前使用trycatch语句结构的时候,若try语句段中的某一句出现异常情况,那么这部分try语句段中,从出现异常的语句开始,之后的所有语句都不会被执行,直到这部分try语句段结束。但是在很多的情况下,希望无论是否出现异常,某些语句段都需要被执行,特别是释放资源的操作,例如打开文件后的关闭操作。那么就可以把这部分代码放在finally语句段中,即使try或catch语句段中含有return语句,程序都会在异常抛出后先执行finally语句段,除非try或catch语句段中执行System.exit()方法,或是出现Error错误时finally语句段才不会被执行而退出程序。9
5、.2 Java多线程机制在这一章之前,介绍的程序都是单线程的。也就是说,一个程序,从头到尾都会按顺序执行语句,在程序开始至结束的这一段时间内只做了一件事。而实际中,由于计算机中CPU的工作效率实在是太高了,以至于在很多时间CPU都是被闲置的。为了更好的利用计算机中的资源,Java语言为编程提供了很方便就能实现的多线程机制。也就是说程序员设计的一段Java程序,可以在一段时间内同时做多件事。9.2.1 Java中的线程每一个线程都有自身的产生、存在和消亡的过程,是一个动态的概念。每一个Java程序都有一个缺省的主线程,对应于application应用程序,主线程就是main()主方法的执行步骤;
6、对于Appet小应用程序,则是按其生命周期执行的步骤作为主线程。多线程机制则是在主线程执行的过程中,又建立了多个线程在同一段时间内执行。由于计算机CPU的处理速度非常的快,所以在很短的一段时间内(几毫秒或更短),CPU按顺序执行了几个线程,但对于用户来说,感觉上是在这一段时间,CPU同时完成了多个线程的活动。举个简单的例子:当用户从网上下载一段音乐的同时,就可以欣赏其中已经下载完成的部分,而实际实现的代码中,是存在了下载和播放两个线程,同时要协调好这两个线程,这样就使用户在下载歌曲的这一段时间内,同时完成了下载和播放两件事情。9.2.2 创建线程的两种方式Java语言中实现多线程有两种途径:一
7、种是创建一个类,让该类继承Thread类;另一种方法是让自己创建的类实现Runnable接口。使用这两种方法都可以使用到Thread类及其方法。1继承Thread类并覆盖run()方法2实现Runnable接口9.2.3 线程的启动与停止当使用线程的构造函数创建了一个线程对象时,程序是不会自动调用线程中的run()方法的。若要启动线程,就必须调用线程对象中的start()方法,这样才可以真正地启动一个线程。但需要注意的是:当线程对象调用了start()方法后,并不会立刻运行,该线程对象会进入线程队列,和其他线程一样排队等待CPU的使用权,只有真正获得了CPU使用权后才会执行。线程的停止的方法要
8、多一些,Thread线程类包含stop()方法,可以用来停止线程,但在Java2种,由于该方法会导致Java运行环境不稳定,所以基本不使用。而通常使用的方法,就是让线程执行完run()方法后自然结束。9.2.4 线程的优先级在Java语言中,每一个线程都会有一个优先级。线程在等待队列中等待CPU的使用权,而这个等待队列正是根据线程的优先级和就绪时间来给线程排队的。优先级高的线程会优先获得CPU的使用权获得执行,而优先级低的则会后执行。Java语言中,将线程的优先级设置为110十个等级,常量MAX_PRIORITY(定义为10)表示最高优先级,常量MIN_PRIORITY(定义为1)表示最高低优
9、先级,常量NORM_PRIORITY(定义为5)是一般默认的优先级。线程类中提供setPriority(int n)和getPriority()两种方法,来分别实现设置和获取线程的优先级。需要注意的是,setPriority()方法中的参数必须是110之间的一个整型数值。9.2.5 线程的同步在使用多线程机制的过程中,往往会遇到一个问题。如果有两个或多个线程都需要对同一个资源进行操作,或是需要共享对同一个对象的访问,若每个线程都对这个资源或对象进行了操作,同时改变了这个资源或对象的状态时,那么线程间就会相互受到影响,同时一部分数据也会受到损坏。为了避免出现这种资源争夺的现象,就需要采用线程的同
10、步机制来解决。在Java语言中,线程同步是通过synchronized关键字来实现的。被synchronized关键字修饰过的方法都是同步方法,只能被线程顺序的使用,在一个线程对该方法使用完毕之前,该线程对资源是独享的,其他任何线程都将处于阻塞状态。设置为线程同步的语法格式为:Synchronized void method()方法体;9.3 I/O数据流与文件处理流是Java语言中,用来处理I/O(输入/输出)的方式。采用流的方式使得程序员在处理不同的数据或数据存储时更加的方便、鲜明和统一。由于文件是计算机用来保存大量数据的地方,因此,对应不同的数据类型,程序员可以采用不同类型的流,读取文件
11、的内容或是向文件中写入数据。9.3.1 流概述本章中将会介绍Java中用来操作文件和目录的方法,以及对文件进行读写操作的方法。同任何其他编程语言一样,Java语言具备强大的文件处理功能。通过流程序员可以把数据从一个地方带到另一个地方。1流的概念2输入输出类结构3实例:使用输入流来读取指定目录下文件的内容9.3.2 文件类(File)的使用File类是主要用于获取磁盘中文件,或者目录信息的一个类。但需要注意的是:File类的对象并不打开文件,也不提供任何的文件处理的功能。但是java.io包中的其他类,经常会使用File类中的对象,来指定所要操作的文件或目录。9.3.3 随机访问文件除了之前介绍
12、的对文件操作的流以外,Java还提供了用来专门处理文件的流,并称之为随机访问文件RandomAccessFile流。该流提供了更加完善的、对文件输入输出操作的功能。当用户需要严格地处理文件时,就可以选择使用RandomAccessFile类。但需要注意的是,与之前文件流不同,RandomAccessFile类创建的流既可以表示数据文件的源,也可以表示数据文件的目的。也就是说,RandomAccessFile类创建的流既可作为输入流,也可以同时作为输出流。9.4 网 络 编 程Java语言最初是作为一种网络程序设计语言而出现的,因此具有强大的网络功能。Java所编写的网络程序,能够使用网络上的各
13、种资源和数据,能够与服务器建立各种形式的连接和传输通道,能够让计算机间进行通讯。9.4.1 网络通讯概述在介绍网络程序设计之前,首先要对网络有一定的认识,了解网络通讯的有关概念。因此在这一节中,先对网络通讯的相关知识作简要的介绍。1网络通讯的概念2网络协议基础3Java中所涉及到的网络应用类9.4.2 使用URL类IP地址用来唯一标识网络中的计算机,而URL则标识了网络中计算机上的资源。Java中使用URL类来封装URL相关的数据信息。使用URL类和URLConnetion类,都能够实现对一个服务器的访问,获取服务器上的资源。在这一节中,将向大家介绍URL类和URLConnetion类,以及如
14、何使用这两个类的对象及方法,来实现对网络中URL资源的访问。1URL类中常用的方法2使用URLConnetion类9.4.3 使用套接字Socket类套接字Socket类,是通过C/S(客户端/服务器)方式,来实现网络中的两个程序间的连接。通过指定的IP地址以及端口来实现互联。建立连接的两个程序间可以实现双向通信,任何一方既可以接受请求,也可以向另一方发送请求,因此利用套接字Socket类可以轻易的实现网络中数据的传递。由于使用套接字Socket实现的网络连接,是基于C/S模式的TCP/IP协议下的连接,因此在使用的时候也会分为客户端套接字和服务器端套接字两种。在Java中同样提供了用于实现客
15、户端套接字的Socket类,以及用于实现服务器端套接字的ServerSocket类。9.5 数据库操作数据库是存储数据信息的中心,是一个有组织的数据集合。而Java作为一门高级语言,能够方便的操作数据库。在本章中,将要向大家介绍如何使用Java语言连接数据,以及操作数据库中的数据。9.5.1 使用JDBC连接数据库JDBC(Java Database Connectivity)是一种可以执行SQL语句的Java API。JDBC由Java编程语言编写的类及接口组成,使用它可以将Java程序连接到Oracle、SQL Server、Sybase、IBM DB2、Informix、MySQL等多种
16、关系型数据库。程序员通过JDBC可以编写出具有平台无关性的数据库应用程序。1JDBC的作用及主要接口2连接不同数据库3连接数据库的基本步骤 9.5.2 执行SQL语句在实际的使用当中,会有三种Statement对象,分别是:Statement对象、PreparedStatement对象以及CallableStatement对象。这三种对象都可以作为执行SQL语句的容器。每一个都专用于发送特定类型的SQL语句,如下所示。(1)Statement对象:用于执行不带参数的简单SQL语句。(2)PreparedStatement对象:用于执行带参数或不带参数的预编译的SQL语句。(3)CallableStatement对象:用于执行对数据库已存储过程的调用。1如何使用PreparedStatement接口执行SQL语句2使用CallableStatement接口执行SQL语句9.6 小 结本章介绍Java中的高级编程,包括在Java中进行数据库开发、Java中与I/O流相关的各种知识、Java中关于网络开发的知识、Java中的异常处理机制、Java中进行多线程开发的基本知识等。通过本章的学习,读者应该基本掌握Java中高级应用,并能利用讲解的内容解决实际问题。