1、Java 程序设计_复习要点第一讲 Java 语言概述1、Java 语言的特点:简单、完全面向对象;平台无关性;多线程;直接支持分布式的网络应用,高效的网络编程;可靠性;安全性。2、运行机制:Java 程序是半编译半解释的。Java 源程序经编译器编译后产生字节码,Java 解释器解释执行字节码。3、Java 程序的开发流程:(1)安装 JDK,设置环境变量;(2)编写 Java 源程序:文件以.java 作为后缀;(3)javac 将源程序编译成字节码文件(.class 文件) ;(3)由运行系统解释和执行字节码文件。 4、Java 程序的分类:分两类(1)Java application(
2、Java 应用程序):能独立运行的应用程序,有控制台和图形用户界面两种运行方式。main()方法是类首先执行的方法,语句必须写在类的方法中。编写完源代码首先通过 javac 编译,生成.class 字节码文件,通过 Java 解释器(如 java.exe)来运行字节码文件。(2)Java applet(Java 小应用程序):Applet 是可以嵌入 Web 页面的最小应用,不能独立运行,必须嵌入到超文本(*.html)中,由浏览器中的 Java 解释器解释执行。对于 Applet 源程序,首先要编译生成字节码文件,再将字节码文件嵌入到超文本中。简而言之:application:应用程序,编译
3、: javac 源文件名;运行:java 字节码文件(含主函数) Applet:嵌入网页中运行的小应用程序,需有相应的 html 文件;5、一个完整的 Java 源程序结构:package 语句:该部分至多只有一句,必须放在源程序的第一句;import:该部分可以有若干 import 语句或者没有,必须放在所有的类定义之前;public classDefinition 公共类定义部分,至多只有一个公共类的定义,Java语言规定该 Java 源程序的文件名必须与该公共类名完全一致;classDefinition 类定义部分,可以有 0 个或者多个类定义;interfaceDefinition 接
4、口定义部分,可以有 0 个或者多个接口定义 。第二讲 Java 语言基础1、Java 的关键字,常量、变量,简单数据类型,运算符、表达式常量:final基本数据类型:8 中基本数据类型:boolean、char、byte 、int、 short、long、float 、double 。其他(数组,类、接口)均为引用或参考类型。带小数点数如 3.13 默认为 double 类型,整数默认 int 型class、interface、数组都算引用/参考数据类型运算符:判等(= = )只能对基本数据类型, equals 方法;短路运算符:case 常量 2:语句 2 ; break;case 常量 n
5、:语句 n; break;default: 缺省处理语句; break ; case 与 break 联用,保证多路分支的正确实现。 case 子句只起标号作用,用来查找匹配的入口并从此处开始执行,对后面的 case 不再匹配,直接执行,直到遇到 break 跳出。(3)循环结构while(布尔表达式) 语句;for(表达式 1;表达式 2;表达式 3) 语句;do 语句 while(布尔表达式 A) ;(4) 转移语句break:对于无标号的,跳出当前整个语句块;有标号的,跳出标号指的语句块。可用于循环结构也用于分支结构。continue:只能在循环语句中使用;无标号:用来结束所在循环语句块
6、的本次循环;有标号:跳过标号所指的循环语句所有余下部分语句,直接转入标号标明的循环层次。注:break 使程序跳出当前循环,continue 终止当前这一轮的循环,跳过本轮剩余的语句,直接进入当前循环的下一轮。习题:1)相应作业、实验第三讲 面向对象程序设计1、 类的定义和使用:class 类名,构造函数,成员变量、成员函数、this;构造函数,this:指当前类的一个对象,表示对当前类对象的一个引用,在类中调用当前对象(类)中的方法或变量。this 还可以用来引用当前类的构造函数。2、 继承:Object:所有类的父类;函数覆盖、域的隐藏、super、this ;1)子类名 extends
7、父类名;Java 只能单继承;函数覆盖、域的隐藏:super:在子类中要引用被隐藏的父类成员时,就需要用关键字 super 指明。如调用父类中被覆盖的方法,其一般格式为 super.方法名(参数表);用来访问父类中被隐藏的成员变量,其一般格式为:super.成员变量名;调用父类的构造方法,其一般格式为 super(参数表)。2)有继承关系,构造函数的执行顺序:先执行父类的再执行子类的;3)方法的重载和覆盖,覆盖的原则一个类中如果有多个同名方法但带有不同的参数列表,成为方法的重载。重载方法的参数列表不同是指参数的数据类型或个数或次序不同。重载方法之间必须以参数列表相区别,不能以返回值区别。方法的
8、覆盖是指在子类中使用与父类中同名的方法,且方法的参数(个数、类型、排列顺序)和返回类型完全一样,即子类中的方法的代码覆盖掉父类中的方法的代码,实现与父类中的方法的不同功能。方法覆盖的三个规则:(1) 返回值必须相同(2) 子类方法不可比父类被覆盖的方法更难访问(3) 子类方法不可声明抛出更多的异常3、接口:关键词:interface,interface 接口名;接口中只有函数说明没有定义;以后用类来实现接口:class 类名 implements 接口名,接口可以实现多个,类要实现接口中所有的函数,不然类是抽象类,抽象类不能直接生成对象。4、涉及到的关键词:abstract、final、sta
9、ticstatic:静态成员,整个类对象所共有,而不是像普通成员变量那样,被对象所特有。类中成员分:实例成员、类成员,知道两种成员的区别5、类的严谨定义及修饰符修饰符 class 类名 extends 父类名 implements 接口列表 修饰符 类型 成员变量名 1, , 成员变量名 n; / 类体;(1)类修饰符分类:访问修饰符:缺省(默认方式)、public非访问修饰符:abstract、final ,不能同时修饰一个类(2)extends : 实现继承(3)implements : 实现接口类的访问控制权限:公有和缺省。类中成员的访问控制权限有四种:private、缺省、protec
10、ted 和 public 公有6、习题定义类、继承、实现接口第四讲 数组、字符串和实用类1、数组都带有长度属性:length,例如,int a=new int10, a.length,Java 中二维数组,每一行上的元素个数可以不同;2、了解 Java 可重用类结构3、字符串类:String 类第五讲 异常1、什么是异常:程序执行过程中出现的非正常事件,例如:用户输入错、所需文件找不到、数组下标越界等。而不是编译的语法错。2、Java 将运行错误分为两类:错误(Error)和异常(Exception) 。3、程序对错误和异常的三种处理方式:(1)程序不能处理错误:对于内存溢出等错误,由系统进行
11、处理,Java 程序本身不能对错误进行处理;(2)程序应避免能预见而不捕获的异常:对于程序能够预见的异常,程序应该考虑周到进行事先处理,尽量避免发生异常;(3)必须处理的异常:对于程序无法预见的、由特殊环境错误造成的异常,如文件没找到、网络连接中断等,必须进行异常处理,保证程序正常运行,及其可靠性和安全性。4、异常处理措施:Java 中的异常处理机制包括(1)异常类体系, (2)捕捉异常的 try 语句, (3)抛出自定义异常对象的 throw 语句, (4)声明方法抛出异常的 throws 子句, (5)自定义异常类。这些功能不仅能够捕获并处理异常,还能够主动抛出异常,也能够将异常传递给调用
12、者。5、两种异常处理机制1)抛出异常:如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛出(throws)异常。2)捕获异常:当 Java 运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。6、捕获异常处理过程try可能产生异常的代码catch(异常类型 1 变量) 调用者对异常的处理 catch(异常类型 2 变量) 调用者对异常的处理 finally 说明:try 块中的语句没有产生异常。在这种情况下, Java 首先执行 try 块中的所有的语句,然后执行 finally 子句中的代码,最后执行 trycatchfinally块后面的语
13、句;try 块中的语句产生了异常,而且此异常在方法内被捕获。在这种情况下,Java 首先执行 try 块中的语句,直到产生异常处,然后跳过此 try 块中剩下的语句,执行捕获此异常的 catch 子句的处理代码;然后执行 finally 子句中的代码;try 块中产生了异常,而此异常在方法内没有被捕获。在这种情况下,Java 将执行 try 块中的代码直到产生异常,然后跳过 try 块中的代码而转去执行 finally 子句中的代码,最后将异常抛出给方法的调用者。7、异常处理抛出异常throws 异常说明总是和方法说明出现在一起。这样,方法说明告诉编译器该方法可能会产生哪些异常,从而要求它的调
14、用者必须考虑处理这些异常。返回类型 方法名() throws 异常类列表 方法体 在程序中使用 throw 语句来抛出异常:throw 异常类的实例;8、用户自定义的异常(1) 定义 Exception 子类,代表异常类型 (2) 在适当的时候创建并抛出异常对象。(3) 调用者处理异常习题:1)设计一个 Java 程序,自定义异常类,从命令行(键盘)输入一个字符串,如果该字符串值为“XYZ ”,则抛出一个异常信息“This is a XYZ”,如果从命令行输入 ABC,则没有抛出异常。 (只有 XYZ 和 ABC 两种输入) 。 (实验中题目)第六讲 多线程1、多线程:程序并发执行,而不是执行
15、完一个任务再执行另一个任务;2、基于线程的多任务处理环境中,线程是可执行代码的最小单元;3、Java 语言中多线程的两种实现方法将并发执行的代码写到 run()1)继承 Thread 类:Thread 中有 run()方法,该方法中包含了运行时执行的代码。缺省情况下 run()方法是空的。可以通过继承 Thread 类并重写它的 run()方法实现用户线程。 class 类名 extends Threadpublic void run( ) Thread 类中 start()函数启动线程sleep() :让线程休眠,让出 CPU 的使用2)实现 Runnable 接口class 类名 impl
16、ements Runnablepublic void run( ) 使用过程:(1)自定义类实现 Runnable 接口(2)使用 Thread 类的另一构造函数:Thread(Runnable, String) 用实现了 Runnable 接口的类的对象中所定义的 run()方法, 来覆盖新创建的线程对象的 run()方法(3)使用 start()启动线程3)多线程的两种实现方法及各自的特点(P195)(1)继承 Thread 类:声明一个线程类继承 Thread 类,并且覆盖 Thread 类的run()方法,说明线程对象所执行的操作。这是方式的优点是,Thread 类的子类对象就是线程对
17、象,具有 Thread 类声明的方法,且具有线程体。缺点是不适用于多重继承。(2)实现 Runnable 接口:当一个类已继承一个父类,还要以线程方式运行时,就需要实现 Runnable 接口。一个实现 Runnable 接口的对象本身不是线程对象,它只能作为一个线程的目标对象使用,因此,还需要声明一个 Thread 线程对象。4、线程对象的生命周期(1)新建态:new Thread()创建的线程对象处于新建态,系统没有为它分配资源;(2)运行态:处于新建态达的线程启动后,进入就绪态,再由操作系统调度执行而成为运行态;(3)阻塞态和等待态:一个运行态的线程因某种原因不能继续运行时,进入阻塞态或
18、等待态。(4)终止态:线程对象停止运行未被撤销时是终止态。5、线程对临界资源采用互斥使用方式,关键字:synchronized 对需要的方法或代码进行标记;6、线程间的通信:wait(),notify(),notifyAll()waitnofify 调度过程是几个线程对同一个对象进行操作,其中某些线程在一定条件下自动挂起(wait) ,等待其他线程在一定条件下通知其继续运行。典型问题:生产者消费者问题7、练习题:1)用多线程的两种实现方法,编写满足要求的应用程序。第七讲 流1、File 类:代表磁盘文件本身信息的类,而不是文件中的内容;可以访问指定文件的所有属性:文件名、文件长度、修改日期等。
19、同时可以利用 File 类提供的方法来创建文件、删除文件、重命名文件等。2、文件随机读写:RandomAccessFile 类,一般的流中,文件指针只能顺序移动,RandomAccessFile 可以任意移动文件指针, seek(long pos)。3、流:1)分类:输入流和输出流、字节流和字符流字节流:InputStream、outputStream字符流:Reader ,Writer2)流的使用过程:3)标准输入设备:System.in 字节流,借助 Scanner 或 BufferedReader实现从键盘的输入4)FileInputStream/FileOutputStream,实现文
20、件的读取、文件的拷贝;DataInputStream/DataOutputStream,实现对基本类型数据的读写操作;ObjectInputStream/ObjectOutputStream,实现对对象的读写操作;4)字符流:FileReader 、FileWriter 、InputStreamReader 、BufferedReader4、习题:1)从键盘输入内容,写入到文件中,直到输入“bye”结束。 (实验题目)2)读入一个文件的内容拷贝到另一个文件中。第八讲 图形界面java.awt 包主要由组件类、事件类、布局类、菜单组件类等组成。1、基本组件、容器基本组件:不可再分的组件,例:Bu
21、tton、Checkbox、Menu、TextArea 等容器组件:用来包含其他组件的,分两类:1)窗口类 Window:Frame、Dialog,2)面板类 Panel,不能独立存在,不能添加菜单栏组件不能独立地显示,必须放到容器中才能显示出来。2、布局管理常用的布局管理器:流布局(FlowLayout) 、边界布局(BorderLayout) 、网格布局(GridLayout) 、卡片布局(CardLayout) 。容器可以通过 setLayout()函数设置布局方式。Frame 默认为边界布局、panel 和 Applet 默认流布局。3、事件处理机制:事件、事件类、事件监听器接口每个事
22、件发生后,都会创建一个 Event 对象,包括:事件类型、发生的时间、坐标、发生事件的对象等。按产生事件的物理操作有:MouseEvent、WindowEvent 、ActionEvent 等;每一类事件都有相应的事件监听器:*Listener ,例如 MouseEvent 事件的监听器接口为 MouseListener;处理发生在某个 GUI 组件上的 XXXEvent 事件的某种情况,其事件处理的通用编写流程:1)编写一个实现了 XXXListener 接口的事件监听器类;2)在 XXXListener 类中的用于处理该事件情况的方法中,编写处理代码;3)调用组件的 addXXXListe
23、ner 方法,将类 XXXListener 创建的实例对象注册到 GUI 组件上。Adapter 类:接口中要实现的方法可能很多,类实现接口的时候所有函数都必须实现,为了简化程序 Java 提供了一些适配器类: XXXAdapter。4、习题:1)编写满足要求的图像界面处理,有相应的事件处理。例:三位数拆分或简单的计算器。第九讲 网络通信1、Java 网络通信的三层次:1)最高级:网络上下载 Applet由浏览器提供;2)Applet 声音播放和图像显示由 Java 开发环境提供;3)最低层:利用 包中提供的类直接在程序中实现网络通信。2、通信基础:TCP/UDP 协议,IP 地址、端口号,
24、IP 地址和端口号构成 Socket(套接字)3、Java 提供的网络功能类1)应用层:URL、URLConnection2)网络层:InetAddress3)传输层:TCP:Socket、ServerSocket;UDP:DatagramPacket 、DatagramSocket、MulticastSocket使用这些类都需要考虑异常处理4、TCP Socket 通信:ServerSocket、Socket 类1)服务器端:ServerSocket 类,Socket 类2)客户端:Socket 类服务器端程序中包含一个提供 TCP 连接服务的 ServerSocket 对象和一个参与通信的
25、 Socket 对象,客户端程序中只包含一个参与通信的 Socket 对象。服务器端的 ServerSocket 对象提供 TCP 连接服务,连接成功后,实际进行通信的是服务器端的 Socket 对象和客户端的 Socket 对象。通信流程:(1)在服务器端创建一个 ServerSocket 对象,指定端口号, ServerSocket 类的 accept()方法使服务器处于阻塞状态,等待用户请求;(2)在客户端创建一个 socket 对象,指定主机地址和端口号,连到服务器上;(3)服务器端接收到客户端的连接请求,建立一条 TCP 连接,再创建一个Socket 对象与客户端的 Socekt 对
26、象进行通信;(4)服务器端和客户端分别创建字节输入流和字节输出流,通过字节输入流获得对方发来的数据,通过字节输出流向对方发送数据;(5)当一方决定结束通信时,向对方发送结束信息;另一方收到结束信息后,双方分别关闭各自的 TCP 连接;(6)ServerSocket 对象停止等待客户端的连接请求。Socket 通信程序的四个基本步骤:(1)在客户方和服务器方创建 Socket/ServerSocket。(2)打开连接到 Socket 的输入/输出流。(3)利用输入/输出流,按照一定的协议对 Socket 进行读/写操作。(4)关闭输入/输出流和 Socket。5、习题1)实验:简单的客户端/服务器端通信,一问一答;2)例子:简单的时钟服务器。