1、1,复习,回顾所有课内练习、课后练习与实验代码。,知识点的复习以教学PPT为准。,2,第一讲 Java语言概述,3,Java的特点,平台独立性和可移植性,面向对象(OO),4,OOP和POP编程思路的差别,1 围绕“正在发生什么”编写-面向过程的编程,2 围绕“谁将被影响”编写-面向对象的编程,所有计算机程序都由两类元素组成:代码和数据程序两种写法:以代码为核心 或 以数据为核心 进 行组织编写。,5,OOP和POP编程思路的差别,面向对象的编程。 (1)围绕它的数据(对象)和为这个数据严 格定义的接口来组织程序。 (2)面向对象的程序实际上是用数据控制对代码的访问。,纯粹面向过程的编程(1)
2、程序具有线性执行的特点。(2)面向过程的程序可以认为是代码作用于数据。,6,第二讲 标识符,保留字和数据类型,第三讲 运算符、表达式和语句,7,第四讲 类与对象,1、类的基础 2、对象的声明与使用 3、变量与对象的生命周期 4、进一步研究方法和类,8,类,类就是对象的模板,它定义一类对象所能共同拥有的属性和共同的行为。,对象就是类的实例。,注:对于面向对象的程序而言,一个类可以生成若干个类的对象,先有类的定义才有属于该类的对象,不存在不属于某个具体类的对象。,9,构造方法,构造方法在对象创建时被调用;,构造方法与类同名;,构造方法没有任何返回值。,10,在JAVA中,同一个类中的2个或2个以上
3、的方法可以有同一个名字,只要它们的参数声明不同即可。 该方法就被称为重载(overload),这个过程称为方法重载(method overload)。,方法重载,11,static关键字,类中被static修饰的属性或方法,完全独立于该类的任何对象,能够在类的任何对象被创建之前访问。,当声明一个对象时,并不产生static变量的copy,所有对象共享同一个static变量。,12,static关键字,声明为static的方法有以下几条限制:,它们仅能调用其他的static方法;,它们只能访问static属性;,它们不能以任何方式引用this或super;,13,命令行参数,可以通过命令行参数将
4、信息传递给main()。,命令行参数是程序执行时在命令行中紧跟在程序名后的信息。,命令行参数作为字符串存储在传递给main()的String数组中。,14,练习:,利用static变量设计实例计数器。 该计数器可以统计并判断该类创建的对象的次数是否大于3。,15,第五讲 数组与字符串,16,第六讲 继承,1、继承的基本概念 2、关键字super的使用 3、重载与改写 4、创建多级类层次 5、何时调用构造方法 6、深入探讨Father f=new Son(); 7、关键字final的使用,17,1、继承的基本概念,被继承的类叫超类或父类(superclass),继承超类的类叫子类(subclas
5、s),例如:A是一个类,使用关键字extends来创建A的子类B class A class B extends A ,使用关键字extends继承一个类,18,1、继承的基本概念-成员的访问和继承,子类可以继承父类中的所有成员(包括 父类中所有静态与动态的属性与方法),但是它不能访问被声明成private的成员。,注: (1)构造函数不被继承!(2)在java中规定: 一个父类可以有多个子类,一个子类只能有一个父类。,19,2、关键字super的使用,关键字super允许在子类中调用父类的构造函数。,20,2、关键字super的使用-子类中构造方法的调用顺序,调用子类的构造方法时,无论子类的
6、构造方法中是否用到了super(),每个父类默认的(或无参数的)构造方法都将执行。,21,子类中某个方法的名字与父类中的某个方法名字一样,但二者的参数不同。这时子类重载了父类中的某个方法。,3、改写(Override)与重载(Overload),22,3、改写(Override)与重载(Overload),子类中某个方法的名字与父类中的某个方法名字一样,参数也一样。这时子类改写(或覆盖)了父类中的某个方法。父类中定义的方法将被隐藏。,关键字super允许在子类中调用父类中被子类覆盖的成员。,23,7、关键字final的使用,关键字final有三个用途:,(1)创建一个常量。 如:final i
7、nt NUM=100;,(2)使用final阻止方法被子类覆盖。 如:final void meth();,24,7、关键字final的使用,(1)使用final阻止类被继承。 如:final class A ,25,3、继承的意义和用途,继承是面向对象的一块基石,它允许创建分等级层次的类。,继承可以大大提高程序代码的可重用性,并可缩短软件的开发周期。同时,继承又对程序的删改和增添提供了方便,从而大大提高了程序的可扩展性和可维护性。,26,课内练习,某高等院校中的学生可以分为两类:本科生(Undergraduate)和研究生(Graduate)。 凡是学生都有名字,年龄和学位。其中本科生拥有专
8、业,研究生拥有研究方向。请编写一段程序,可以用于输出学生信息。 注:该程序应具备一定的扩展性,如其他院校可能拥有专科生,博士生,本科生也可能分为工学方向和理学方向等。,27,第七讲 接口与程序包,1、抽象类的概念 2、接口 3、程序包 4、访问控制,28,抽象类与接口,抽象类或接口位于类层次结构中的顶层。抽象类或接口中所定义的抽象方法决定了类层次结构是否能顺利地通过继承来解决问题域中的问题。,29,使用关键字abstract描述一个抽象类或抽象方法。 如:abstract class A abstract void callme( );,抽象类,30,接口,使用关键字interface定义一个
9、接口 如:interface interfaceA void callback(); ,使用关键字implements可以让一个类实现一个接口或同时实现多个接口(多继承)。,31,程序包(package),包的引入增加了访问控制的另一个维度。,类成员访问表,32,课内练习:,创建Rodent(啮齿动物):Mouse(老鼠),Gerbil(沙鼠),Hamster(大颊鼠)等的一个继承分级结构。在基础类中,提供适用于所有Rodent的方法,并在衍生类中覆盖它们,从而根据不同类型的Rodent采取不同的行动。创建一个Rodent数组,在其中填充不同类型的Rodent,然后调用自己的基础类方法,看看会
10、有什么情况发生。,33,第八讲 异常处理,8.1 异常处理基础 8.2 异常类型 8.3 异常处理8.3.1 运行时异常(隐式处理)8.3.2 非运行时异常(显式处理):try-catch-finally8.3.3 非运行时异常(显式处理): throw与throws,34,异常处理可以有以下几种: 对运行时异常可以不做显式的处理; 对非运行时异常必须做显式的处理:(1)使用try-catch-finally语句捕获异常;(2)通过throws子句将异常抛出给上一级处理。,异常处理基础,35,下面是显式的异常处理的通常形式: try /被监视的可能会产生错误的代码块 catch(Excepti
11、on exOb) /捕捉到某个异常对象exOb后对该异常的处理 finally /无论try代码块中的异常是否存在,绝对都要执行的代码。 ,异常处理,36,异常处理,1、通过throw关键字手动抛出明确的异常 2、利用throws子句将异常抛出给上一级处理,37,异常在继承关系中的特殊性,父类抛出的异常范围应比子类大。,38,第9讲 Java的输入输出流,9.1 流概念 9.2 Java用于输入输出流的类 9.3 数据流的使用,39,输入流,1. 输入流 通过打开一个连接到数据源(文件、内存或网络端口上的数据)的输入流,程序可以从数据源上顺序读取数据。,40,输出流,2. 输出流 通过打开一个
12、连接到目标的输出流,程序可以向外部目标顺序写数据。,41,Java用于输入输出流的类,java.io中的基本流类:说明:它们是抽象类,不能直接创建对象。,42,File类,File类的对象主要用来获取文件本身的一些信息,如:文件所在的目录、文件的长度、文件读写权限等,但是不涉及对文件的读写操作。,43,课后练习:字符流的使用,使用文件流实现简单的留言板:留言信息由作者,标题与留言内容三个部分组成。 通过标准输入流System.in获取用户输入的三部分信息,使用BufferedWriter将留言信息保存在d:message.txt文件中。 使用BufferedReader将留言信息逐行读出。,4
13、4,课后练习:,提示: 1、存入文件的每条留言的结构为:”author&title&contentn” 2、通过BufferedReader类的readLine()方法读取出留言后,使用StringTokenizer类对1中的留言结构进行分析,通过&字符析取出留言的三个部分,分别显示。 3、如何为每条留言编号?如何将新留言插入文件尾部(追加记录)?,45,第10讲 图形用户界面,10.1 Applet基础 10.2 Applet的执行 10.3 简单的Applet显示方法,46,10.1 Applet基础,Applet与Application的主要区别在于它们的执行方式不同: Applicat
14、ion是使用命令行命令直接运行,从其main()方法开始运行的; Applet则是在浏览器中运行的,首先必须创建一个HTML文件,通过编写HTML语言代码告诉浏览器载入何种Applet以及如何运行。,47,10.1 Applet基础 -Applet的生存周期方法,48,Applet的生命周期,10.1 Applet基础 -Applet的生存周期,49,课内练习,编写一个Applet,要求如下: 利用Color的构造函数 Color(float red,float green,float blue)产生随机颜色的字符串; 在HTML窗口中使用Applet输出随机颜色的字符串“欢迎使用留言板”,字
15、符串的字体为宋体,类型为加粗,大小为30镑。 每当窗口改变时,字符串的颜色都会改变。,50,10.7 AWT事件类型, 低级事件 ComponentEvent( 组件事件:组件尺寸的变化,移动) ContainerEvent( 容器事件:组件增加,移动) WindowEvent( 窗口事件:关闭窗口,窗口闭合,图标化) FocusEvent( 焦点事件:焦点的获得和丢失) KeyEvent( 键盘事件:键按下、释放) MouseEvent( 鼠标事件:鼠标单击,移动) 高级事件(语义事件) ActionEvent(动作事件:按钮按下,TextField中按Enter键) AdjustmentE
16、vent(调节事件:在滚动条上移动滑块以调节数值) ItemEvent(项目事件:选择项目,不选择“项目改变”) TextEvent(文本事件,TextFiled中文本对象改变),51,10.7 AWT事件处理模型,组件(事件发生者)触发一个相应类型的事件 此事件由相应类型的Listener(事件监听者)接收并处理,52,10.9 布局(Layout),Java.awt包中共定义了5种布局管理器类,它们分别是FlowLayout、BorderLayout、CardLayout、GridLayout和GridBagLayout。 每个布局管理器类对应一种布局策略。当一个容器选定一种布局策略时,它
17、应该创建该策略对应的布局管理器类的对象,并将此对象设置为自己的布局管理器。,53,10.9 布局(Layout),没有指明布局管理器,则panel与applet都使用缺省的FlowLayout布局策略。而Window,Frame,Dialog使用BorderLayout布局策略。 没有布局管理器的容器,其中的对象会互相覆盖、遮挡,影响使用,所以必须为每个容器设置一个合适的布局管理器。 容器设置布局使用方法:setLayout(布局对象),54,课后练习,使用applet的布局策略分别实现留言板的用户登录,用户注册,发表留言和查看留言四个界面。,通过处理各个界面中的Button,TextFiel
18、d,TextArea上的事件,分别实现留言板中的用户登录,用户注册,发表留言和查看留言功能。,本次课后练习只需分别实现4个功能即可,不要求整合功能。,55,第11讲 多线程编程,11.1 线程的基本概念 11.2 线程的生命周期 11.3 线程的创建,56,11.2 线程的生命周期,线程的生命周期:一个线程从创建到消亡的过程线程的生命周期可分为四个状态:1. 创建状态 2. 可运行状态 3. 不可运行状态 4. 消亡状态,57,线程的状态转换图:,调度器,11.2 线程的生命周期,58,1. 创建状态 当用new操作符创建一个新的线程对象时,该线程处于创建状态。处于创建状态的线程只是一个空的线
19、程对象,系统不为它分配资源通过调用start方法启动该线程。,11.2 线程的生命周期,59,2. 可运行状态 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体中的run()方法,这样就使得该线程处于可运行( Runnable )状态。这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行。,11.2 线程的生命周期,60,3. 不可运行状态 当发生下列事件时,处于运行状态的线程会转入到 不可运行状态:调用了sleep()方法;线程调用wait方法所等待的特定条件的满足;线程输入/输出阻塞;试图获取某个对象的同步锁;调用了某个线程对象的jo
20、in()方法。,11.2 线程的生命周期,61,返回可运行状态:处于睡眠状态的线程在指定的时间过去后; 如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待进程条件的改变; 如果线程是因为输入/输出阻塞,输入/输出完成,11.2 线程的生命周期,62,4. 消亡状态当线程的run方法执行结束后,该线程自然消亡。,11.2 线程的生命周期,63,11.3 线程的创建,在Java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法。继承Thread类并重写run方法。 通过定义实现Runnable接口的类进而实现run方法。,64,课内练习:,1、用两种方法分别编写属于自己的线程,要求能够输出对线程本身的描述,并分别以不同时间延迟在屏幕上输出5,4,3,2,1。 2、在主线程中创建三个子线程,并确保主线程最后结束。,65,Java程序的编写和编译、运行过程 Java的基本保留字 数组的定义和初始化 构造函数的定义和调用 This和super关键字的使用 实例方法和类方法的区别和使用 方法的重载和重写 继承的实现,66,接口的定义和实现 类的声明方法 抽象类 Java布局管理器 Applet的生命周期和运行方法 线程创建的方法,