JAVA程序设计实例教程

Download Report

Transcript JAVA程序设计实例教程

JAVA程序设计实例教程
主编: 关 忠
制作:李晓新
2011年3月
JAVA程序设计实例教程
•
•
•
•
•
•
•
第1章
第2章
第3章
第4章
第5章
第6章
第7章
你好,Java
比较大小
车辆信息显示
计算器
文本编辑器
赛马游戏
网络即时通讯
第1章 你好,Java
•
•
•
•
1.1
1.2
1.3
1.4
基础实例
基础知识——Java程序设计基础
扩展知识——常用的Java集成开发环境
扩展实例
引 言
• Java是一种简单易用、完全面向对象、安
全可靠、主要面向Internet且具有最棒的跨
平台可移植性的开发工具。从现在开始,
Java将带领读者进入一个全新的领域。
• 本章将主要通过一些比较简单的实例,使
读者对于Java能有一个初步的认识,掌握
Java程序设计中最基础的知识。
1.1 基础实例
1.1.1 编写步骤
• 首先,执行“开始→所有程序→附件→记事本”。
然后,在记事本中输入以下内容:
1 //MyFirstJavaApplication.java
2 public class MyFirstJavaApplication{
3
public static void main(String args[]){
4
System.out.println("你好,Java!");
5
}
6 }
1.1 基础实例
1.1.2 运行结果
• 执行“开始→运行”,在弹出的“运行”
对话框中,输入“cmd”,单击“确定”按
钮或执行“开始→所有程序→附件→命令
提示符”。在命令窗口中,使用JDK中的
javac命令编译源文件
MyFirstJavaApplication.java,语句如下:
• javac MyFirstJavaApplication.java
1.1 基础实例
• 编译完成后,在源文件所在的文件夹下,
会生成一个名为
“MyFirstJavaApplication.class”的字节码
文件。然后,使用JDK中的java命令运行字
节码文件MyFirstJavaApplication.class,命
令如下:
• java MyFirstJavaApplication
• 该Java程序运行后,会在命令窗口中输出
相应信息
1.1 基础实例
• MyFirstJavaApplication程序的运行结果
1.2 基础知识——Java程序设计基础
1.2.1 Java的开发运行环境
• SUN公司提供了自己的一套Java开发环境,通常
称之为JDK(Java Development Kit),并且提供
了多种操作系统下的JDK。随着时间的推移和技
术的进步,JDK的版本也在不断的升级,如
JDK1.2、JDK1.3、JDK1.4等,目前最新版本是
JDK6(也就是JDK1.6)。
• 不同操作系统下的JDK的各种版本在使用上基本
相似,大家可以根据自己的使用环境,从SUN公
司的网站http://java.sun.com上下载相应的版本。
本书中所使用的都是基于Windows平台下的JDK
6。
1.2 基础知识——Java程序设计基础
• 安装完成后,这个工具包中的所有内容都
会放在JDK安装文件夹下,其中的bin文件
夹中包含了所有相关的可执行文件。
• 在bin文件夹中,javac.exe是Java的编译工
具,Java源文件的扩展名为.java,源文件
被编译后会在其所在的文件夹中生成相应
的字节码文件,字节码文件的扩展名
为.class;java.exe是Java的解释工具,负
责解释执行Java字节码文件。
1.2 基础知识——Java程序设计基础
1.2.2 Java程序的基本结构
1.Java应用程序
2.Java小应用程序
1.2 基础知识——Java程序设计基础
• Java应用程序的执行过程
1.2 基础知识——Java程序设计基础
• Java小应用程序的执行过程
1.2 基础知识——Java程序设计基础
1.2.3 Java的基本语法格式
1.标识符
• 在Java语言中,标识符用于为各种变量、数组、方法、类、
对象、接口、包等命名。Java标识符的命名规则是:
• Java标识符由字母、数字、下划线(_)和美元符号($)
组成,长度不限。
• Java标识符的第一个字母必须是字母、下划线(_)或美
元符号($)。
• 尽可能避免使用含$符号的标识符,因为它们常被编译器
用来创建标识符的名字。
• Java标识符严格区分大小写。
• 用户不能直接使用Java语言中的关键字作为标识符,但是
它可以包含关键字作为它名字的一部分。
1.2 基础知识——Java程序设计基础
• 在同一作用域内,一般不允许有同名的标识符。
• 为了提高程序的可读性,标识符的命名最好能够做到“见
名知义”,而且规范大小写的使用方式。通常情况下,对
于标识符有以下一些风格约定:
• _和$一般不作为变量名,方法名的开头。
• 包名:全部小写,例如java、applet、awt等。
• 接口名、类名:每个单词的首字母都要大写,例如
MyFirstJavaApplication、System、Graphics等。
• 变量名、对象名、方法名:第一个单词全部小写,其余单
词只有首字母大写,例如anyVariableWorld、drawString
等。
• 常量名:全部大写,例如PI、MAX_VALUE等。
1.2 基础知识——Java程序设计基础
2.关键字
• 关键字是由Java语言定义的,具有特殊含
义的字符序列。
• 每个关键字都有一种特定的含义,不能将
关键字作为普通标识符来使用。所有的
Java关键字一律用小写字母表示。
1.2 基础知识——Java程序设计基础
• Java关键字
1.2 基础知识——Java程序设计基础
3.分隔符
• Java程序的分隔符用于区分Java源程序中
的基本成分,分为注释、空白符和普通分
隔符三种。
1.2 基础知识——Java程序设计基础
⑴ 注释
• 在程序中适当地加入注释是一种良好的编程习惯,
这样会增加程序的可读性。
• 注释不能放在一个标识符或关键字之中,也就是
说,要保证程序中最基本元素的完整性。注释不
会影响程序的执行结果,编译器将忽略注释。
• 在Java中,主要有以下三种注释形式:
• 单行注释://注释部分──只对当前行有效
• 多行注释:/*注释部分*/
• 文档注释:/**注释部分*/
1.2 基础知识——Java程序设计基础
⑵ 空白符
• 空白符包括空格、回车、换行和制表符
(Tab键)。各种Java基本成分之间的多个
空白符与一个空白符的作用相同。在编译
过程中,编译器会忽略空白符。在程序中
适当的使用空白符,可以增强程序的可读
性。
1.2 基础知识——Java程序设计基础
⑶ 普通分隔符
• 普通分隔符具有确定的含义,不能用错。它主要
包括四种分隔符:
• {}大括号:用于定义语句块,例如:定义类体、
方法体和复合语句以及数组的初始化等。
• ;分号:用于作为语句结束的标志。
• ,逗号:用于区分方法的各个参数,区分变量说明
的各个变量。
• :冒号:用于作为语句的标号
1.3 扩展知识——常用的Java集成开
发环境
1.3.1 JCreator
• JCreator是一个小巧灵活的Java程序开发工具,
也是一个Java集成开发环境。
• 它可将Java程序的编写、编译、运行和调试集成
进自身的环境中直接进行开发,且无需进行环境
变量的设置。
• 在功能上与SUN公司所公布的JDK等文字模式开
发工具相较之下来得容易,还允许使用者自定义
操作窗口界面及无限Undo/Redo等功能。
1.3 扩展知识——常用的Java集成开
发环境
• JCreator操作界面
1.3 扩展知识——常用的Java集成
开发环境
1.3.2 JBuilder
• JBuilder主要的特点有:
⑴ JBuilder支持最新的Java技术,包括Applets、
JSP/Servlets、JavaBean以及EJB (Enterprise
JavaBeans)的应用。
⑵ 用户可以自动地生成基于后端数据库表的EJB Java类,
JBuilder同时还简化了EJ B的自动部署功能。
⑶ JBuilder支持各种应用服务器。
⑷ JBuilder能用Servlet和JSP开发、调试动态Web应用。
⑸ 利用JBuilder可以创建(没有专有代码和标记)纯Java
2应用。
⑹ JBuilder拥有专业化的图形调试界面,支持远程调试和
多线程调试,调试器支持各种JDK版本,包括J2ME、
J2SE和J2EE。
1.3 扩展知识——常用的Java集成
开发环境
• JBuilder操作界面
1.3 扩展知识——常用的Java集成
开发环境
1.3.3 Eclipse和MyEclipse
1.Eclipse
⑴ 概述
• Eclipse是著名的跨平台的自由集成开发环境
(IDE)。
• Eclipse是一个开放源代码的、基于Java的可扩展
开发平台。
• Eclipse的前身是IBM的Visual Age for Java。
• Eclipse是可扩展的体系结构,可以集成不同软件
开发供应商开发的产品,将他们开发的工具和组件
加入到Eclipse平台中。
1.3 扩展知识——常用的Java集成
开发环境
⑵ Eclipse的结构和内核
• Eclipse本身作为一个开放源码的软件项目,
它主要包含3个子项目:平台子项目、Java
开发工具(JDT-java)子项目和插件开发环
境(PDE-plug-in)子项目。
• Eclipse目前的最新版本为Eclipse 3.5.2。
1.3 扩展知识——常用的Java集成
开发环境
2.MyEclipse
• MyEclipse是一个十分优秀的用于开发Java, J2EE的
Eclipse插件集合。
• MyEclipse目前支持Java Servlet、AJAX、JSP、JSF、
Struts、Spring、Hibernate、EJB3、JDBC数据库链接工
具等多项功能。可以说MyEclipse几乎囊括了目前所有主
流开源产品的专属eclipse开发工 具。
• MyEclipse企业级工作平台(MyEclipse Enterprise
Workbench ,简称MyEclipse)是对Eclipse IDE的扩展,
利用它我们可以在数据库和J2EE的开发、发布,以及应
用程序服务器的整合方面极大的提高工作效率。
• 它是功能丰富的J2EE集成开发环境,包括了完备的编码、
调试、测试和发布功能,完整支持HTML、Struts、JSF、
CSS、Javascript、SQL、Hibernate。
1.3 扩展知识——常用的Java集成
开发环境
• 在结构上,MyEclipse的特征可以被分为7类:
⑴ J2EE模型
⑵ WEB开发工具
⑶ EJB开发工具
⑷ 应用程序服务器的连接器
⑸ J2EE项目部署服务
⑹ 数据库服务
⑺ MyEclipse整合帮助
1.3 扩展知识——常用的Java集成
开发环境
• MyEclipse操作界面
1.4 扩展实例
• 在本节中,将使用Eclipse来开发一个简单
的Java应用程序。
• 通过实例,请读者熟悉一下Eclipse开发环
境,本书后面都会使用Eclipse来进行相应
的开发。
1.4 扩展实例
1.启动Eclipse
启动介面
1.4 扩展实例
2.创建Java项目
• 执行“文件→新建→Java项目”,在弹出
的“新建Java项目”对话框中,设置“项
目名”,并在内容中设置项目的保存位置,
• 然后,单击“完成”按钮,完成Java项目
的创建工作,系统会在项目的保存位置上
创建相应的文件夹。
1.4 扩展实例
3.创建Java类
• 执行“文件→新建→类”,在弹出的“新
建Java 类”对话框中,设置类名。
• 然后,单击“完成”按钮,完成Java类的
创建工作,系统会自动在项目文件夹中创
建相应的文件。
1.4 扩展实例
4.编写Java类
• 在编辑窗口中,输入以下Java程序代码:
1 //MyFirstJavaApplication1.java
2 import javax.swing.JOptionPane;
3 public class MyFirstJavaApplication1{
4
public static void main(String args[]){
5
JOptionPane.showMessageDialog(null,"你好,
Java!");
6
}
7}
• 输入完成后,执行“文件→保存”,即可完成在Eclipse下
第一个Java程序的编写工作。
1.4 扩展实例
• 1.4.2 运行结果
• 执行“运行→运行”或“运行→运行方式
→Java应用程序”,即可执行程序。如果
程序尚未保存,Eclipse会询问在执行前是
否要保存文档,然后执行程序。该Java程
序运行后,执行结果如图 .
1.4 扩展实例
• MyFirstJavaApplication的运行结果
第2章 比较大小
•
•
•
•
2.1
2.2
2.3
2.4
基础实例
基础知识——Java基本语
扩展知识——数组法
扩展实例
引 言
• 通过上一章的学习,读者对于Java已经有
了一个初步认识,掌握了Java程序设计的
基础知识。
• 本章中,将通过一个比较数值大小的实例
来进一步学习Java语言的基本语法规则,
从而让读者能够使用Java开发工具编写出
一个具备数值比较功能的Java程序。
2.1 基础实例
• 现在将编写一个Java应用程序,主要用于
实现两个数大小的比较,并给出比较结果。
• 通过实例,读者将进一步学习Java语言的
基本语法规则。
2.1 基础实例
2.1.1 编写步骤
1.启动Eclipse
2.创建Java项目
3.创建Java类
4.编写Java类
2.1 基础实例
•
1
2
3
4
5
6
7
8
9
10
11
12
13
14
在编辑窗口中,输入以下Java程序代码:
//Compare.java
import javax.swing.JOptionPane;
//装载JOptionPane类
public class Compare{
public static void main(String args[]){
String s1,s2;
s1=JOptionPane.showInputDialog("请输入第一个整数:");
//s1接收来自输入文本框的第一个整数
s2=JOptionPane.showInputDialog("请输入第二个整数:");
//s2接收来自输入文本框的第二个整数
int firstNumber,secondNumber;
firstNumber=Integer.parseInt(s1);
//将字符串s1转换成整数赋值给firstNumber
secondNumber=Integer.parseInt(s2);
//将字符串s2转换成整数赋值给secondNumber
2.1 基础实例
15
16
17
18
19
20
21
22
23
24
25
26
//比较两个数的大小
if(firstNumber>secondNumber){
JOptionPane.showMessageDialog(null,
firstNumber+"大于"+secondNumber);
}
else if(firstNumber==secondNumber){
JOptionPane.showMessageDialog(null,
firstNumber+"等于"+secondNumber);
}
else{
JOptionPane.showMessageDialog(null,
firstNumber+"小于"+secondNumber);
}
}
}
• 输入完成后,执行“文件→保存”,即可完成在Eclipse下
Java程序的编写工作。
2.1 基础实例
2.1.2 运行结果
• 执行“运行→运行”,即可执行程序。
• 如果程序尚未保存,Eclipse会询问在执行
前是否要保存文档,然后执行程序。
• 该Java程序运行后,按对话框提示操作。
2.2 基础知识——Java基本语
• Java是基于C++语言开发出来的,因此其
语法规则与C/C++非常相似,但是又有所不
同。
• 接触过C/C++的读者,学习时要特别注意
Java与C/C++的区别。
• 下面详细介绍Java的基本语法。
2.2 基础知识——Java基本语
• 2.2.1 数据类型
2.2 基础知识——Java基本语
1. 整数类型
2.2 基础知识——Java基本语
2.浮点数类型
2.2 基础知识——Java基本语
3.字符类型
• 在Java中,利用关键字char来定义字符类
型的数据。字符型数据是用单引号括起来
的单个字符。例如:char c = 'A'。
• Java中的字符型数据是基于16位的Unicode
字符集,每个字符占两个字节。Java中的
字符型数据属于整型数据,但是无符号的
整型数据,其取值范围为0~216-1。
2.2 基础知识——Java基本语
4.逻辑类型
• 逻辑类型,又称为布尔类型,用关键字
boolean来表示。例如:boolean b = false。
2.2 基础知识——Java基本语
2.2.2 常量与变量
1.常量
• 常量是不能被程序修改的固定值,在程序
运行之前,其值就已经确定了。在Java中,
定义常量时需要使用final关键字。定义基本
数据类型的常量的基本语法格式为:
• [修饰符] final 基本数据类型 常量名1=数值1
[, 常量名2=数值2……];
2.2 基础知识——Java基本语
• Java中的常量,主要有:
⑴ 整型常量
• 整型常量分为单字节整型、短整型、整型和长整
型4种,它们均可以用十进制、八进制和十六进制
三种方式表示。
• 十进制整数:十进制整数的第一位数字不能为0。
例如:123、-456、23L。
• 八进制整数:要求必须以0为前导,例如:0123、
-011、0377L。
• 十六进制整数:要求必须以0x或0X作为前导,例
如:0x123、-0X1A2D、0XFFFL。
2.2 基础知识——Java基本语
⑵ 实型常量
• 实型常量分为单精度和双精度两种类型。实型数
据只采用十进制数表示,有小数形式和指数形式
两种不同的表示。
• 小数形式(标准形式):由数字和小数点组成,
且必须有小数点。例如:0.123、1.23D, 0.9901F。
• 指数形式(科学计数法形式):用指数幂的形式
表示,要求必须有指数部分。例如:123e3、
123E-3,其中e或E之前必须有数字,且e或E后
面的指数必须为整数。
2.2 基础知识——Java基本语
⑶ 字符常量
• 字符常量是用单引号括起来的一个字符,
例如:'a'、'A'。Java中还允许使用转义字
符‘\’来将其后的字符转变为其他的含义。
2.2 基础知识——Java基本语
• Java中常用的转义序列
2.2 基础知识——Java基本语
⑷ 逻辑常量
• 逻辑常量只有两个值:true和false,分别代
表布尔逻辑中的“真”和“假”。
• 在Java中,逻辑常量不能转换成任何其他
类型的数据。
• true和false只能赋值给声明为boolean类型
的变量,或者用于逻辑运算表达式中。
2.2 基础知识——Java基本语
2.变量
• 变量是在程序运行过程中可以赋值并能够对其值进
行更改的数据。
• 变量是Java程序中的基本存储单元,它的定义包
括变量名、变量值、变量类型和作用域几个部分。
• 变量根据其所属的数据类型划分:基本数据类型变
量和引用数据类型变量(复合数据类型变量)。
• 根据变量被声明的位置划分为:局部变量、成员变
量。
2.2 基础知识——Java基本语
⑴ 变量的定义与初始化
⑵ 变量的赋值与类型转换
⑶ 变量的作用域
2.2 基础知识——Java基本语
• 成员变量的默认初始化原则
2.2 基础知识——Java基本语
2.2.3 运算符和表达式
• 表达式是由变量、常量和各种运算符组成
的式子,是程序的基本组成单位之一。
• 表达式可以是程序语句的一部分,也可以
是一个单独的程序语句。
• 表达式的值就是表达式中的各变量、常量
经过运算所得到的结果,而这些运算就主
要是由表达式中的运算符来规定。
2.2 基础知识——Java基本语
1.运算符
⑴ 算术运算符
2.2 基础知识——Java基本语
• 自增、自减运算符
2.2 基础知识——Java基本语
⑵ 关系运算符
2.2 基础知识——Java基本语
⑶ 逻辑运算符
2.2 基础知识——Java基本语
⑷ 位运算符
2.2 基础知识——Java基本语
⑸ 赋值运算符
2.2 基础知识——Java基本语
⑹ 条件运算符
• 条件运算符是Java语言中唯一的一个三目运算符,
其一般形式为:表达式?语句1:语句2。
• 在计算条件表达式时,先计算表达式,如果值为
true,就执行语句1,并将其结果作为条件表达式
的值;否则执行语句2,并将其结果作为条件表达
式的值。
• 其中表达式的运行结果必须是布尔型数据,语句1
和语句2返回的数据的数据类型必须保持一致。
2.2 基础知识——Java基本语
⑺ 其他运算符
2.2 基础知识——Java基本语
2.表达式
⑴ 表达式的值和类型
⑵ 表达式的运算顺
2.2 基础知识——Java基本语
• 运算符的优先顺序
2.2 基础知识——Java基本语
2.2.4 流程控制
1.顺序结构
程序从上至下一行一行执行的结构,中间
没有分支和跳转,直到程序结束。
一般情况下,程序中的语句都是按程序设
计时所确定的次序一个语句接一个语句地
顺序执行的。
2.2 基础知识——Java基本语
2.选择结构
• 选择结构提供了一种控制机制,使得程序
的执行可以跳过某些语句不执行,而转去
执行特定的语句。
• 在Java中,选择语句包括if语句(单选)、
if…else语句(双选)和switch语句(多选)
2.2 基础知识——Java基本语
3.循环结构
• 循环语句的作用是反复执行一段代码,直
到满足终止循环的条件为止。Java语言中
提供的循环语句有:
• while语句
• do-while语句
• for语句
2.2 基础知识——Java基本语
4.跳转语句
• 在使用循环语句时,只有循环条件表达式
的值为false时才能结束循环。
• 想要提前中断循环,则需要使用break语句,
还可以在循环语句块中添加continue语句,
来跳过本次循环要执行的剩余语句,然后
开始执行下一轮循环。
2.3 扩展知识——数组法
• Java中,数组是一种最简单的复合数据类型。
• 数组是有序数据的集合,数组中的每个元素
都具有相同的数据类型,可以用一个统一的
数组名和下标来唯一地确定数组中的元素,
这些数据在内存中的存放是连续的。数组分
为一维数组和多维数组。
2.3 扩展知识——数组法
2.3.1 一维数组
1.一维数组的声明
• 在Java中,一维数组的定义形式为:
• 数组元素类型 数组名[ ];
• 数组元素类型[ ] 数组名;
2.3 扩展知识——数组法
2.一维数组的初始化
• 可以在定义数组的同时为数组元素分配空
间并赋值,也就是对数组进行静态初始化。
例如:
• int intArray[]={1,2,3,4};
• String stringArray[]={"abc", "How", "you"};
2.3 扩展知识——数组法
3.一维数组元素的引用
• 只有完成了对所有数组元素的创建和初始化工作
之后,才可以在程序中引用数组元素、修改其属
性和调用其方法。
• Java中数组元素的引用是通过数组下标来实现的,
其引用方式为:
• 数组名[数组下标]
• 其中数组下标可以为整型常数或表达式,下标从0
开始,到数组元素个数值减1为止。每个数组都有
一个属性length来指明它的长度,即数组元素的
个数。
2.3 扩展知识——数组法
2.3.2 多维数组
1.二维数组的定义
• 在Java中,二维数组的定义形式为:
• 数组元素类型 数组名[ ][ ];
• 数组元素类型[ ] [ ] 数组名;
2.3 扩展知识——数组法
2.二维数组的初始化
• 静态初始化
• Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续
分配的,所以不要求二维数组每一维的大小相同。例如:
• int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};
• 动态初始化
• 直接为每一维分配空间,具体语法格式如下:
• 数组名= new 数组元素类型[arrayLength1][arrayLength2];
• 从最高维开始,分别为每一维分配空间:
• 数组名= new 数组元素类型[arrayLength1][ ];
• 数组名[0] = new 数组元素类型[arrayLength20];
• 数组名[1] = new 数组元素类型[arrayLength21];
• …
• 数组名[arrayLength1-1] = new 数组元素类型[arrayLength2n];
2.3 扩展知识——数组法
3.二维数组元素的引用
• 与一维数组相同,二维数组元素可以通过
指定数组元素下标的方式进行引用。
• 对二维数组中的每个元素,引用方式为:
数组名[index1][index2]。
• 需要注意的是:在数组的每一维中,数组
元素的编号均从0开始,到该维的数组元素
个数减1结束。
2.4 扩展实例
2.4.1 编写步骤
• 首先,通过双击Eclipse文件夹中的名为Eclipse的
可执行文件,就可以启动Eclipse了。然后,开始
进行Java程序的开发。
1.创建Java项目
• 执行“文件→新建→Java项目”,在弹出的“新
建Java项目”对话框中,设置“项目名”,并在
内容中设置项目的保存位置。然后,单击“完成”
按钮,完成Java项目的创建工作,系统会在项目
的保存位置上创建相应的文件夹。
2.4 扩展实例
2.创建Java类
• 执行“文件→新建→类”,在弹出的“新
建Java 类”对话框中,设置类名。然后,
单击“完成”按钮,完成Java类的创建工
作,系统会自动在项目文件夹中创建相应
的文件。
2.4 扩展实例
3.编写Java类
• 在编辑窗口中,输入以下Java程序代码:
1 //BubbleSort.java
2 public class BubbleSort{
3
public static void main(String args[]){
4
int a[]={27,6,4,8,10,12,89,68,45,37};
5
System.out.println("排序前的数据序列:");
6
printArray(a);
7
System.out.println("选择排序的各趟结果:");
8
sortBubble(a);
9
printArray(a);
10
}
11
12
//数组排序的方法
2.4 扩展实例
13
14
15
16
17
18
19
20
21
22
23
public static void sortBubble(int a[]){
int hold;
for(int pass=1;pass<a.length;pass++){
for(int i=0;i<a.length-1;i++)
if(a[i]>a[i+1]){
hold=a[i];
a[i]=a[i+1];
a[i+1]=hold;
}
printArray(a);
}
2.4 扩展实例
24
}
25
26
//打印数组的方法
27 public static void printArray(int b[]){
28
for(int i=0;i<b.length;i++)
29
System.out.print(" "+b[i]);
30
System.out.println("");
31
}
32 }
• 输入完成后,执行“文件→保存”,即可完成在
Eclipse下Java程序的编写工作。
2.4 扩展实例
2.4.2 运行结果
• 执行“运行→运行方式→Java应用程序”,
即可执行程序。
• 如果程序尚未保存,Eclipse会询问在执行
前是否要保存文档,然后执行程序。
• 在Eclipse下运行Java程序时,通常会将在
命令窗口中显示的结果显示在“控制台”
中。
2.4 扩展实例
• 冒泡排序运行结果
第3章 车辆信息显示
•
•
•
•
3.1
3.2
3.3
3.4
基础实例
基础知识——面向对象程序设计基础
扩展知识——面向对象程序设计高级
扩展实例
引 言
• 本章介绍了如何使用java语言实现面向对象
程序设计的基本概念,包括类和对象的关
系,类的实例化,类的派生和继承,多重
继承的功能接口以及包等概念,并综合运
用上述知识给出了两个简单的车辆信息显
示的实例。
3.1 基础实例
• 本实例的功能是通过类及对象的创建等操作,完
成一个可以显示小轿车信息的程序。
3.1.1 编写步骤
• 在Eclipse中建立一个小轿车类,在其中定义了小
轿车的各种属性及其方法,并对小轿车类进行实
例化,创建一个速腾轿车的对象。
• 设置速腾轿车对象的属性,并执行相关的方法,
最后显示出这个对象的各种信息。
3.1 基础实例
•
程序的源代码清单
1 public class CarDisp { //小轿车类
2
3
public static void main(String[] args) {
4
CarDisp Sagitar = new CarDisp(); //创建对象速腾
5
6
Sagitar.color = "黑";
7
Sagitar.model = "速腾";
8
Sagitar.horsepower = "小";
9
Sagitar.manufacturer = "一汽大众";
10
11
System.out.println("车辆类型:"+Sagitar.type);
……
15
System.out.println("生产厂家:"+Sagitar.manufacturer);
16
17
System.out.println("当前车速:"+Sagitar.speed+" 行驶方
向:"+Sagitar.direction);
……
3.1 基础实例
34
35
36
37
38
39
40
41
42
43
44
45
46
48
49
50
}
public String type;
//车辆类型
public String color;
//颜色
public String model;
//型号
public String horsepower; //马力
public String manufacturer; //生产厂家
public int speed;
//速度
public String direction;
//方向
public CarDisp(){
type = "小轿车";
direct
}
public void run(){
// 行驶方法
……
53
54
55
}
public void turnleft(){
……
57
}
……
//左转弯方法
3.1 基础实例
3.1.2 运行结果
3.2 基础知识——面向对象程序设
计基础
3.2.1面向对象程序设计的特点
1.封装性 (Encapsulation)
2.继承 (Inheritance)
3.多态性 (Polymorphism)
3.2 基础知识——面向对象程序设
计基础
3.2.2 类的建立与声明
• 类(Class)实际上是对某种类型的对象定
义变量和方法的原型。它表示对现实生活
中一类具有共同特征的事物的抽象,是面
向对象编程的基础。
• 类是对某个对象的定义。它包含有关对象
动作方式的信息,包括它的名称、方法、
属性和事件。
3.2 基础知识——面向对象程序设
计基础
•
•
•
•
•
类定义的一般形式如下:
限制符 class 类名{
类体
}
类的定义由类头和类体两部分组成。
3.2 基础知识——面向对象程序设
计基础
3.2.3 类中的属性和方法
1.属性
• 属性就是数据成员,它们指定了该类的内部表示,
其一般由常量或变量组成,比如基础实例中第36
行到41行,就是类属性的定义。
• 在类定义中属性可以赋初值,如果设置了初始值,
实例化对象后,对象中的属性就会继承该值。如
果没有在类定义中设置初始值,则在实例化对象
后,要进行显式的赋值操作,否则该值会为空
(null)。
3.2 基础知识——面向对象程序设
计基础
2.方法
• 方法是包含一系列语句的代码块,他们指
定了该类的操作方法,方法一般由方法头
和方法体组成,方法的定义如下:
• 限制符 返回值类型 方法名(参数类型 参数1,
参数类型 参数2,…){
•
方法体
• }
3.2 基础知识——面向对象程序设
计基础
3.构造方法
• 方法中有一个特殊的应用,当方法名与类
名相同时,这个方法被称为构造方法,即
在对象被实例化时自动调用的一个方法,
一般将需要初始化的语句放在其中。
• 构造方法没有返回值,因此不需要设置返
回值类型,
3.2 基础知识——面向对象程序设
计基础
3.2.4 类中的访问权限
1.public修饰符
2.private修饰符
3.protected修饰符
4.friendly修饰符
5.修饰符使用时的注意
3.2 基础知识——面向对象程序设
计基础
3.2.5 对象
• 所谓对象就是类的实例化,一个对象就是
类中所定义的一组变量和相关方法的集合。
• 对象的变量是构成对象的核心,不同对象
的变量是分离的。对象通过成员变量和类
方法进行相互间的交流,以实现各种复杂
的行为。
3.2 基础知识——面向对象程序设
计基础
1.对象的声明
• 对象的声明与普通变量的声明相似,首先
指定一个类名作为这个对象的类类型,然
后在类名后写一个对象名即可。
• 对象声明的例子如下所示:
• 类A 对象A;
• 类B 对象B1, 对象B2;
• 类A实例化了一个对象A,类B实例化了两
个对象B1和B2。
3.2 基础知识——面向对象程序设
计基础
2.对象的创建
• 示例中创建了两个对象:
• 对象A=new 类A();
• 对象B1=new 类B(“hello”);
3.2 基础知识——面向对象程序设
计基础
3.访问对象中的成员
对象成员的引用方式必须使用运算符“.”,
数据成员和方法的引用格式如下所示:
• 对象名.数据成员名
• 对象名.方法名(参数表)
•
例如基础实例中的第6行和第20行等。
3.3 扩展知识——面向对象程序设
计高级
3.3.1 派生与继承
• 继承是面向对象程序设计的一种重要手段。在面
向对象的程序设计中,采用继承的机制可以有效
地组织程序的结构,设计系统中的类,明确类间
关系,充分利用已有的类来完成更复杂、深入的
开发,大大提高程序开发的效率,降低系统维护
的工作量。
• 类继承也称为类派生,是指一个类不需要进行任
何定义就可以拥有其他类的非私有成员,实现代
码重用。
3.3 扩展知识——面向对象程序设
计高级
• 父类与子类的层次关系
3.3 扩展知识——面向对象程序设
计高级
3.3.2
方法重载
• 方法重载的引入简化程序员的工作,将方法的选择交由Java系统负责。如果
没有重载,在编写如下语句段 为
public int add1(int a, int b){
return a+b;
}
public float add2(float a, float b){
return a+b;
}
• 现在有了方法重载,就可以将方法名写成相同的名称,如下所示:
public int add(int a, int b){
return a+b;
}
public float add(float a, float b){
return a+b;
}
3.3 扩展知识——面向对象程序设
计高级
3.3.3
接口
1.接口的定义
• Java语言中的接口是通过interface关键字来
声明的,
• 其声明格式如下:
interface 接口名 {
接口体
}
3.3 扩展知识——面向对象程序设
计高级
• 一个清扫设备接口示例定义:
interface CleaningEquipment { //清扫设备
接口
public int CleanerNumber = 2;
public void CleanBegin();
public void CleanStop();
}
3.3 扩展知识——面向对象程序设
计高级
2.接口的继承
• 具体的语法格式为:
interface 子接口名 extends 父接口名1, 父
接口名2
{
接口体
}
3.3 扩展知识——面向对象程序设
计高级
3.接口的实现
• 接口中只声明了方法成员,而没有给出方
法体,这样还不能在程序中使用,要想使
用接口中声明的方法成员,就必须在实现
接口的类中给出方法体,这个过程称为接
口的实现。
• 在类的声明中,用implements子句来表示
实现某个或某些接口。
3.3 扩展知识——面向对象程序设
计高级
3.3.4 包
• 所谓“包”就是一个设定的命名集合,它是Java
提供的组织类和接口的一种有效工具,定义的类
都加入某一个包中,并作为包的一部分存在,
Java类中的成员变量和成员方法都在类中定义,
使用包机制使得每个Java的变量和方法都可以用
全限定的名字来表示,包括包名、类名和成员
(方法和变量)名,各部分间用点号分隔即可。
3.3 扩展知识——面向对象程序设
计高级
1.包的创建
• 创建一个包非常简单,在Java源文件的最开始包
含一个package语句即可。
• 其语法格式如下:
package 包名;
• 为了更好地使用包中的类,可以创建不同层次的
包,这通常是由不同包的功能分类决定的。采用
下面的形式可以创建一个包的层次结构:
package p1[.p2[.p3]];
3.3 扩展知识——面向对象程序设
计高级
2.包的使用
• 定义好的包可以通过import语句来引用。在
Java源文件中,import语句需要放在
package语句之后,但在其他任何类定义之
前。
• import package1[.package2].(classname|*);
3.3 扩展知识——面向对象程序设
计高级
3.Java的常用包
⑴ java.lang包 ⑵ java.io包
⑶ java.util包
⑷ java.net包
⑸ java.awt包 ⑹ java.awt.image包
⑺ java.applet包 ⑻ java.text包
⑼ java.beans包
3.4 扩展实例
3.4.1 编写步骤
• 在Eclipse中新建立一个项目CarDisp2,并
在其中增加类文件CarDisp2.java,然后在
其中输入语句。
3.4 扩展实例
3.4.2 调试与运行
• 编写完成后,测试
并运行程序,运行结
果如图 。
第4章 计算器
• 4.1 基础实例
• 4.2 基础知识(一)——界面设计与布局管
理器
• 4.3 基础知识(二)——事件处理
• 4.4 扩展知识——异常处理
• 4.5 扩展实例
引 言
• 本章介绍了Java图形用户界面(GUI)和事
件处理的基础知识,包括图形用户界面中
AWT和Swing两个类库中常用的容器和组件
等;各类常用的事件处理机制。
• 同时还介绍了异常处理机制在Java语言中
的应用,并综合运用上述内容完成计算器
的实例。
4.1 基础实例
• 本实例是一个简易计算器,功能是可对数
字进行加(+)、减(-)、乘(*)、除(/)简单算术
计算。
4.1.1 编写步骤
• 在Eclipse中建立一个项目,名称为
Calculator,
• 在项目中建立一个类文件,名称与项目名
相同,在类文件中输入相应的程序代码。
4.1 基础实例
4.1.2 运行结果
• 编写完成后,可以测试程序的运行结果。
• 首先通过单击按钮选择数值1,单击运算符
号选择做什么运算,再选择数值2,最后单
击等号按钮,得出数值1和数值2运算了后
的结果。
4.1 基础实例
• 计算器程序界面
4.1 基础实例
• 本程序的主要功能:
• 使用鼠标单击数字按钮,上方文本区会对应显示
出应数字内容。单击”C”按钮可以清空显示回复0
显示。
• 当单击对应的运算符号时,如果是第一次计算则
会等待用户选择第二个数值,如果已经计算过则
把前面的结果显示出来后,把结果作为第一个数
值再进行计算。
• 当单击等号按钮,对前面选择的数值和运算符进
行运算得出结果。可以把结果继续用于计算,也
可以再单击其他数值进行下一次的运算。
4.2 基础知识(一)——界面设计
与布局管理器
• 图形用户界面GUI(Graphical User
Interface)是程序提供给用户操作的图形界
面。包括窗口、菜单、按钮、文本区、复
选框和其它各种屏幕元素。
• Java中提供了AWT和Swing两个类库为GUI
设计提供了丰富的功能。
4.2 基础知识(一)——界面设计
与布局管理器
4.2.1 容器
1.面板
2.窗口(Window)
3.框架(Frame)
4.2 基础知识(一)——界面设计
与布局管理器
4.2.2
AWT常用组件
4.2 基础知识(一)——界面设计
与布局管理器
1.框架(Frame)
• 用Frame创建一个Windows窗口,用于存放
其它的组件,通过add( )方法向容器中添加。
• 代码:
Frame f; //创建一个框架
f=ew Frame(“窗口标题名称”); //实例化窗
口对象f
4.2 基础知识(一)——界面设计
与布局管理器
• Frame类常用的构造方法
4.2 基础知识(一)——界面设计
与布局管理器
2.标签(Label)
• 标签是显示文本的组件,可以显示单行的字符串,
起着传递消息的作用。用户不能对其进行修改,
只能查看其内容。
• 代码:
Label myLabel;
//创建一个标签
myLabel =new Label(“标签文字”); //实例化标
签对象,设置标签文字
• 添加标签
f.add(myLabel); //把标签添加到容器f中。
4.2 基础知识(一)——界面设计
与布局管理器
• Label类常用的构造方法和常用的方法
4.2 基础知识(一)——界面设计
与布局管理器
3.按钮(Button)
• 按钮是用来触发特定动作的组件。当用户用鼠标
单击按钮时,系统会自动执行与该按钮相联系的
程序,从而完成预先制定的功能。
• 代码:
Button myButton;
myButton=new Button(“按钮”); //实例化按钮
• 添加标签
f.add(myButton); //把按钮添加到容器f中。
4.2 基础知识(一)——界面设计
与布局管理器
• Button类常用的构造方法和常用的方法
4.2 基础知识(一)——界面设计
与布局管理器
4.文本框(TextField)
• 用来接收用户通过键盘输入的单行文本信
息。通过事件处理机制,程序可以使用这
些文本或数据信息。
• 代码:
TextField myTextField;
myTextField =new TextField (“显示的文
本”,10); //实例化单行文本,并指定初始化
文字和宽度为容纳10个字符。
4.2 基础知识(一)——界面设计
与布局管理器
• TextField类常用的构造方法
4.2 基础知识(一)——界面设计
与布局管理器
• TextField类常用的方法及其说明
• 代码
myTextField.getText();
myTextField.setText(“新文本内容”); //设置文本
框显示的文本。
myTextField.setEditable(false); //设置文本框内容
不能再编辑。
4.2 基础知识(一)——界面设计
与布局管理器
5.文本域(TextArea)
• 用来接收用户通过键盘输入的多行文本信
息。
• 代码:
TextArea my TextArea;
my TextArea =new TextArea (“显示的文
本”,10,3); //实例化多行文本区,并指定初
始化文字和该文本区的行数和列数。
4.2 基础知识(一)——界面设计
与布局管理器
• TextArea类常用的构造方法
4.2 基础知识(一)——界面设计
与布局管理器
• TextArea类常用的方法
4.2 基础知识(一)——界面设计
与布局管理器
6.复选框(Checkbox)
• 复选框可以让用户进行多项选择。复选框
有两种状态,分别为“开”和“关”。当
用户点中复选框时候,复选框的状态就会
改变。
• 代码:
Checkbox myCheckbox;
myCheckbox=new Checkbox(“复选框”);
//创建复选框,并指定复选框的标签内容。
4.2 基础知识(一)——界面设计
与布局管理器
• Checkbox类常用的构造方法
4.2 基础知识(一)——界面设计
与布局管理器
•
•
•
•
•
•
•
•
7.单选按钮组(CheckboxGroup)
单选按钮是在复选框的基础上创建的。单选按钮的选择是互斥的,当
用户选中了组中的一个按钮后,其他按钮自动处于未选中状态。
代码:
CheckboxGroup myCheckboxGroup=new CheckboxGroup();//创建
一个单选按钮组
Checkbox myCheckbox1=new Checkbox(“单选
1”,myCheckboxGroup,true);//创建一个复选框1,并把其加入到上面
创建的单选按钮组中,设置默认为选中状态。
Checkbox myCheckbox2=new Checkbox(“单选
2”,myCheckboxGroup,false);//创建一个复选框2,加入单选按钮组中,
设置默认状态为未选中状态。
最后将组件放置到容器中时,只把复选框添加即可
f.add(myCheckbox1);//向f中添加复选框对象,而不是单选按钮组。
f.add(myCheckbox2);
4.2 基础知识(一)——界面设计
与布局管理器
• CheckboxGrou类常用的构造方法
4.2 基础知识(一)——界面设计
与布局管理器
•
•
•
•
•
•
•
•
8.下拉列表(Choice)
下拉列表的选项框每次只能显示一个选项。如果希望查看
或选择其他的选项,需点击下拉列表右边的下箭头,并从
选项框中选择一个选项。
代码:
Choice myChoice=new Choice(); //创建下拉列表
myChoice.addItem(“下拉列表一”); //向下拉列表中添加
列表项
myChoice.addItem(“下拉列表二”);
……
添加标签
f.add(myChoice);// 把下拉列表添加到容器f中
4.2 基础知识(一)——界面设计
与布局管理器
• Choice类常用的构造方法和常用的方法
4.2 基础知识(一)——界面设计
与布局管理器
9.列表框(List)
4.2 基础知识(一)——界面设计
与布局管理器
10.菜单(Menu)
• 完整的菜单系统由菜单条、菜单和菜单项
组成,其对应的类分别是: MenuBar、
Menu和MenuItem。
• 一个菜单的组成如图
4.2 基础知识(一)——界面设计
与布局管理器
• Menu类常用的构造方法及其说明
4.2 基础知识(一)——界面设计
与布局管理器
4.2.3 Swing常用组件
1.标签类(JLabel)
2.文本输入框(JTextField)
3.密码框输入框(JPasswordField)4.文本区
(JTextArea)
5.按钮类(JButton)
6.单选按钮(JRadioButton )和多选按钮
(JCheckBox)
7.列表(JList)
8.下拉列表(JComboBox)
9.对话框(JDialog)
4.2 基础知识(一)——界面设计
与布局管理器
4.2.4 布局管理
1.FlowLayout布局
4.2 基础知识(一)——界面设计
与布局管理器
2.BorderLayout布局
4.2 基础知识(一)——界面设计
与布局管理器
3.GridLayout布局
4.2 基础知识(一)——界面设计
与布局管理器
4.CardLayout布局
4.2 基础知识(一)——界面设计
与布局管理器
5.自由布局
• 如果把容器的布局设置为null布局(空布
局),则通过所有组件都拥有的方法:
• public void setBounds(int x,int y,int
width,int height);
• 可设置组件在容器中的位置和大小。参数x
和y指定组件左上角在容器中的坐标,参数
width和height指定组件的宽和高,单位为
像素。
4.3 基础知识(二)——事件处理
• 事件有三个重要概念:
• 事件:用户对组件的一个操作,称之为一
个事件。例如鼠标单击或键盘的操作。
• 事件源:发生事件的组件就是事件源。例
如不同的组件像按钮Button、复选框
Checkbox等。
• 事件处理器:负责处理事件的方法。例如
接受到按钮单击事件,并对这个事件进行
处理。
4.3 基础知识(二)——事件处理
• 事件类和相应的接口总结
4.3 基础知识(二)——事件处理
4.3.1 事件类
1.高级事件
• ActionEvent(动作事件):对应的事件为按钮按钮下,
文本框中按下回车键。
• AdjjustmentEvent(调节事件):对应的事件为滚
动条移动滑块调节数值。
• ItemEvent(项目事件):对应事件为选择项目。
• TextEvent(文本事件):对应的事件为文本对象
改变。
4.3 基础知识(二)——事件处理
•
•
•
•
•
•
2.低级事件
ComponentEvent(构件事件):对应的事件为构件尺寸的变化、
移动。
ContainerEvent(容器事件):对应的事件为构件增加移动。
FocusEvent(焦点事件):对应的事件为焦点获得和丢失。
KeyEvent(键盘事件):对应事件为键盘按键的按下、释放。
MouseEvent(鼠标事件):对应事件为鼠标的单击、移动等。
WindowEvent(窗口事件):关闭窗口、窗口最小化等。
4.3 基础知识(二)——事件处理
•
•
•
•
•
•
•
•
•
•
4.3.2 事件监听器和事件适配器
每类事件都有对应的事件监听器,监听是是一种接口,要根据程序实际
情况来定义方法。在上面小节程序中,窗口不能正常关闭,因为没有对
窗口事件进行处理,下面通过实例来实现窗口的关闭。
窗口事件相对应的接口是:
public interface WindowListener extends EventListener{
public void windowOpened(WindowEvent e); //打开窗口时调用
public void windowClosing(WindowEvent e); //退出窗口时调用
public void windowClosed(WindowEvent e); //窗口关闭时调用
public void windowIconified(WindowEvent e);//窗口图标化时调用
public void windowDecionified(WindowEvent e);//窗口非图标化时调用
public void windowActivated(WindowEvent e);//窗口激活时调用
public void windowDeactivated(WindowEvent e);//窗口非激活时调用 }
4.3 基础知识(二)——事件处理
•
•
•
•
•
•
•
•
Java中定义的事件适配器类包括:
ComponentAdapter ,构件适配器
ContainerAdapter,容器适配器
FocusAdapter, 焦点适配器
KeyAdapter ,键盘适配器
MouseAdapter ,鼠标适配器
MouseMotionAdapter ,鼠标运动适配器
WindowAdapter , 窗口适配器
4.3 基础知识(二)——事件处理
4.3.3 常见的事件及其相应的接口
4.3 基础知识(二)——事件处理
• 接上页
4.4 扩展知识——异常处理
4.4.1 异常的概述
• Java语言把程序运算中可能遇到的错误分为两类,
一类是非致命性的,通过某种修正后程序还能继
续执行,比如对负数开平方根、空指针访问、试
图读取不存在的文件、网络连接中断等;
• 另一类是致命性的,程序遇到了非常严重的不正
常状态,不能简单的恢复执行,比如程序中内容
耗尽等。
• 在程序编译或运行中所发生的可预料或不可预料
的错误事件,它会引起程序的中断,影响程序的
正常运行,这在Java语言中称为异常
(Exception)。
4.4 扩展知识——异常处理
• 常见异常类
4.4 扩展知识——异常处理
4.4.2 异常的捕获与处理
• 在程序中添加异常的处理机制,在异常产生时将危害减到
最小。异常主要处理的是Exception类,Error是程序本身
问题,不能处理。常用关键字:try、catch和finally。
• 其语法结构是:
• try{
• <可能产生异常的程序代码段>
• }catch(<要捕捉的异常类> <变量名称>){
• <处理这个异常的程序代码段>}
• finally{
• <必须运行的代码段>
• }
4.4 扩展知识——异常处理
4.4.3 抛出异常
• 抛出异常是Java中处理异常的第二种方式。
• 如果一个方法(中的语句执行时)可能生成某种异
常,但是并不能确定如何处理这种异常,则此方
法应声明抛弃异常,表明该方法将不对这些异常
进行处理,而由该方法的调用者负责处理。
• 抛出异常使用throws关键字来进行处理,throws
是在方法名后标出该方法所产生何种异常的集合
(通常比较多,可以用逗号隔开);即此方法如
果内部产生未经处理的异常就会向外抛出。
4.4 扩展知识——异常处理
4.4.4 用户自定义异常
• 如果Java API中已经定义好的异常类不能完全满
足程序的需求,那么还可以自己定义异常类。
• 用户自定义的异常类,只要去继承某个原有的
Exception类,然后加上两个构造函数,一个需要
传递一个字符串参数,另外一个不需要参数,然
后在构造函数中再往上调用父类的构造函数,把
参数再往上传即可。
4.5 扩展实例
4.5.1 编写步骤(略)
4.5.2 调试与运行
• 运行结果与计算机的界面一样。
• 但当除数分母为零时,会有提示 。
第5章 文本编辑器
•
•
•
•
•
5.1
5.2
5.3
5.4
5.5
基础实例
基础知识(一)——菜单
基础知识(二)——对话框
扩展知识——输入输出流
扩展实例
引 言
• 本章介绍了Java文件操作的基础知识,包
括输入输出流、文件的操作。以及如何建
立菜单和设置菜单功能,建立对话框等功
能。并综合运用上述内容给出了一个文本
编辑器的实例。
5.1 基础实例
• 本章构造实现了一个文本编辑器,类似于
常见的记事本或写字板这样的文本编辑器,
并提供其简化的功能。此编辑器功能包括:
• 所见即所得的文本输入。
• 方便的选中文本、复制文本、删除文本、
插入文本的功能。
• 简单的排版功能,如设置字体、字号等。
5.1 基础实例
5.1.1 编写步骤
1、主类MyEditor.java源代码清单
2.设置颜色程序SetColor.java源代码清单
3.设置字体程序SetFont.java源代码清单
5.1 基础实例
5.1.2 运行结果
· 运行主类MyEditor.java,在命令行键入
java MyEditor或在IDE里选择运行项目,呈
现给用户的主界面
· 在菜单选项中,选取设置字体
· 选取设置颜色
5.2 基础知识(一)——菜单
5.2.1 建立菜单
5.2 基础知识(一)——菜单
• 菜单项的常用方法
5.2 基础知识(一)——菜单
5.2.2 设置菜单功能
• 执行下面代码生成菜单界面。
• //加入菜单条
• fr.setJMenuBar(mb);
• //加入菜单
• mb.add(menuFile);
• //加入菜单项
• menuFile.add(menuFileNew);
• menuFile.add(menuFileClose);
• //加入分隔符
• menuFile.addSeparator();
5.2 基础知识(一)——菜单
• 示例代码如下:
• //当菜单中选择关闭时
• else if(ae.getSource() == menuFileClose) {
•
ta.replaceRange("", 0, ta.getText().length());
•
fileStatus.setText("文件状态:File closed
without save|");
•
fns = null;
• }
5.3 基础知识(二)——对话框
5.3.1 标准对话框
1. FileDialog类
2. 消息对话框
3. 确认对话框
5.3 基础知识(二)——对话框
5.3.2 用户自定义对话框
• 常用的对话框界面相似,显示的信息也很
简单。如果想要设计更为复杂一些的对话
框,可以通过扩展JDialog类来创建。
5.3 基础知识(二)——对话框
• 关于对话框
5.4 扩展知识——输入输出流
5.4.1 输入输出流类
1、BufferedReader类主要方法
5.4 扩展知识——输入输出流
2、InputStreamReader类
• 这是InputStream和Reader之间的桥梁,由
于System.in是字节流,需要用它来包装之
后变为字符流供给 BufferedReader使用。
5.4 扩展知识——输入输出流
3、PrintWriter类
• 用于向文本输出流打印对象的格式化表示
形式。
• PrintWriter out1 = new PrintWriter(new
BufferedWriter(new FileWriter
("IODemo.out")));
5.4 扩展知识——输入输出流
5.4.2 文件
5.4 扩展知识——输入输出流
• File 类常用方法
5.5 扩展实例
5.5.1 编写步骤
1. 在MyEditor.java加入声明
• JMenuItem menuFileOpen,menuFileSave;
2. 在MyEditor.java布局方法中加入新的组件
及事件
3.在MyEditor.java的actionPerformend()方法
中加入新的事件处理
5.5 扩展实例
5.5.2 调试与运行
扩展实例加入的功能运行结果
第6章 赛马游戏
•
•
•
•
6.1
6.2
6.3
6.4
基础实例
基础知识——图形处理
扩展知识——多线程
扩展实例
引 言
• 本章介绍了Java线程的基础知识,使读者
了解如何利用线程来完成“同时”做多件
事的方法,以及如何在此过程中对线程进
行控制,并综合运用上述内容给出一个利
用多线程方法编程的赛马游戏实例。
6.1 基础实例
6.1.1 编写步骤
• 在Eclipse中建立一个项目,项目名称为
Racing,并在项目中建立一个文件包
(Package),名为com,然后在上文件包
中建立以下类。
• 赛马类程序Racing.java主要代码清单
6.1 基础实例
6.1.2 运行结果
• 编写完成后,可以测试程序的运行结果
6.2 基础知识——图形处理
6.2.1
框架(Jframe)
1.JFrame类的构造方法
2. JFrame类的常用成员方法
3. 创建并显示框架
6.2 基础知识——图形处理
6.2.2 简单图形
• Graphics类中绘制图形的方法。
• drawLine(int x1,int y1,int x2,int y2) //绘制一条线段,从(x1,y1)至
(x2,y2)
• drawOval(int x,int y,int w,int h) //绘制空心椭圆,其中x,y为左上角坐
标值;w,h表示半线,当w=h时,即为圆形
• fillOval(int x,int y,int w,int h) //绘制实心椭圆,参与与上例意义一样
• drawRect(int x,int y,int w,int h) //绘制一个空心矩形
• fillRect(int x,int y,int w,int h) //绘制一个填充颜色的矩形
• drawRoundRect(int x,int y,int w,int h,int aw,int ah) //绘制一个圆角矩
形
• fillRoundRect(int x,int y,int w,int h) //绘制一个圆角填充颜色的矩形
6.2 基础知识——图形处理
• 上述方法的实际应用:
public class Draw_pic extends JFrame{
public Draw_pic(){
Container con=getContentPane();
con.add(new DrawPanel());
}
public static void main(String[] args) {
Draw_pic frame=new Draw_pic();
frame.setSize(400, 500);
frame.setVisible(true);
}
6.2 基础知识——图形处理
class DrawPanel extends JPanel{
public void paintComponent(Graphics g){
g.drawRect(10, 10, 20, 20);
g.fillRect(30, 30, 40, 40);
g.drawOval(100, 120, 100, 100);
g.fillOval(160, 160, 40, 40);
g.drawRoundRect(80, 10, 100, 50, 10, 10);
int x[]={225,290,210,275,250};
int y[]={90,40,40,90,10};
g.setColor(Color.green);
g.drawPolygon(x,y,x.length);
g.drawLine(100, 280, 200, 360);
}
}
}
6.2 基础知识——图形处理
• 简单图形运行结果
6.2 基础知识——图形处理
6.2.3 颜色
• JAVA的java.awt.Color类为GUI件设置颜色。颜色中的R
(红)、G(绿)、B(蓝)为三原色的比例。一个RGB
值由三部分组成,第一个RGB部分定义红色的量;第二个
定义绿色的量;第三个定义蓝色的量。
• 1.Color类的构造方法如下:
• public Color(int r, int g, int b);//使用在0-255范围内的整
数指定红、绿、蓝三种颜色的比例来创建一种Color对象
• public Color(float r, float g, float b); //使用0.0-1.0范围
内的浮点数指定红、绿、蓝三种颜色的比例来创建一种
Color对象
• public Color(int rgb); //使用指定的组合RGB值建一
种Color对象
6.2 基础知识——图形处理
2. 设置颜色
• 用java.awt.Graphics类的方法设定颜色或获取颜
色。这些方法及其功能如下:
• setColor(Color c);
//设置前景着色,c代表
颜色
• setColor(new Color( int r, int g, int b)); //根
据RGB值,设置前景颜色
• setBackground(Color c); //设定背景颜色,c代
表颜色
• getColor();
//获取当前所使用的颜色
6.3 扩展知识——多线程
6.3.1 线程的基本概念
• 将程序的独立 任务划分在多线程中通常要
比在单个纯种中完成全部任务容易;
• CPU不会因等待资源而浪费时间;
• 从用户的观点看,单处理器上的多线程提
供了更快的性能。
6.3 扩展知识——多线程
6.3.2 线程类
1. Thread类
2. Runnable接口
6.3 扩展知识——多线程
6.3.3 创建线程
1. 继承Thread类的线程
2.实现Runnable接口的线程
3.两种创建线程方法的比较
6.3 扩展知识——多线程
6.3.4 线程的状态和生命周期
1.创建状态(new Thread)
2.就绪状态(Runnable)
3.运行中状态(Running)
4.阻塞状态(Not Runnable)
5.消亡状态(Dead)
6.3 扩展知识——多线程
线程状态转换图
6.3 扩展知识——多线程
6.3.5 线程间通信
1.同步机制的实现
2.线程间通信的实现
6.3 扩展知识——多线程
6.3.6 随机函数
• 随机函数可以通过调用java.lang.Math.random()
得到,该方法返回一个在0.0(包括0.0)至1.0
(不包括1.0)之间的双精度浮点数值。
• 该方法返回值表示一个伪随机数,不是真正的随
机数。因为它是通过数学算法产生的,而不是通
过真正的随机源而产生的。
• Math.random()的返回值在0.0到接近1.0之间
颁布均匀。例如若想要产生一个1至10之间的一
个随机数,可以通过下代码实现:
int value=(int)(Math.random()*10)+1;
6.4 扩展实例
6.4.1
编写步骤
1. 赛马类程序Horse_model.java主要代码清单。
2. 窗口布局程序Mframe.java主要代码清单。
3. 赛马主程序H_Racing.java主要代码清单 。
6.4 扩展实例
6.4.2 运行结果
第7章 网络即时通讯
•
•
•
•
7.1
7.2
7.3
7.4
基础实例
基础知识——网络程序设计基础
扩展知识——数据库编程
扩展实例
引 言
• 本章介绍了Java网络程序设计的基础知识,
包括TCP和UDP两种程序的设计方法,同
时还介绍了Java数据库编程的一些基本知
识,并综合运用上述内容给出了两个网络
即时通讯的实例。
7.1 基础实例
7.1.1编写步骤
1. 客户端程序JQQClient.java主要代码清单。
2. 服务器端程序JQQServer.java主要代码清单。
7.1 基础实例
7.1.2 运行结果
1.运行服务器端程序
2.运行客户端程序
7.1 基础实例
•
连接成功后的
客户端程序主窗口
连接成功后的服务器
端程序主窗口
7.2 基础知识——网络程序设计基础
7.2.1 网络基础知识
1.TCP/IP协议集
TCP/IP协议集的四个层次
7.2 基础知识——网络程序设计基础
2.IP地址
• IP地址根据使用范围和用途,一般分为五大类,即A、B、C、
D和E类。其中A、B和C类是用户可以使用的IP地址。
• A类IP地址的使用范围是从1.0.0.0到126.255.255.255;
• B类IP地址的使用范围是从128.0.0.0到191.255.255.255;
• C类IP地址的使用范围是从192.0.0.0到223.255.255.255。
• D类和E类IP地址有特殊的应用,D类地址称为组播地址,
供特殊协议向选定的节点发送信息时用,而E类地址则保留
给将来使用。
7.2 基础知识——网络程序设计基础
3.TCP与UDP
• 在TCP/IP协议集的传输层中有两种传输方式,分
别对应两个协议,即TCP和UDP。
• TCP(Transmission Control Protocol)被称为传
输控制协议,是一种面向连接的协议,可以提供
可靠的、基于字节流的传输服务。
• UDP(User Datagram Protocol)被称为用户数
据报协议,是一种面向非连接的协议,传输数据
之前发送端和接收端不需要建立连接,当想要传
送时就简单地将数据发送到网络上。
7.2 基础知识——网络程序设计基础
4.端口号与套接字
常用的服务协议与端口号的对应关系表
7.2 基础知识——网络程序设计基础
7.2.2 基于TCP的网络编程
1.服务器套接字
2.套接字
3.数据传输
7.2 基础知识——网络程序设计基础
• ServerSocket类的四种构造方法及其说明
7.2 基础知识——网络程序设计基础
7.2.3 基于UDP的网络编程
1.用户数据报套接字
2.用户数据报包
7.3 扩展知识——数据库编程
7.3.1 数据库简介
• 数据查询语言(DQL):用于对数据库的数据进
行查询操作的SQL语言。
• 数据处理语言(DML):用于对数据库中的数据
进行创建、修改和删除的SQL语言。
• 数据定义语言(DDL):用于对数据库中的对象
进行创建、修改和删除的SQL语言。
• 数据控制语言(DCL):用于对数据库进行控制
和操作的SQL语言。
7.3 扩展知识——数据库编程
• 在涉及到访问数据库的Java程序设计中,
最主要的SQL语句主要有:
1.SELECT
2.INSERT
3.UPDATE
4.DELETE
7.3 扩展知识——数据库编程
7.3.2 MySQL数据库简介
• MySQL是一个中小型关系型数据库管理系统,它
是由瑞典MySQLAB公司开发,在2008年初被
Sun公司收购。由于其体积小、速度快、开发与
维护成本低,尤其是开放源码这一特点,许多中
小型网站和应用程序为了降低总体成本选择了
MySQL作为数据库,它被广泛地应用在各个领域。
• MySQL最新的版本是5.1,读者可以到MySQL官
方站点http://www.mysql.com中下载安装软件和
查看相关的文档资料。
7.3 扩展知识——数据库编程
• MySQL官方站点主页
7.3 扩展知识——数据库编程
• phpMyAdmin正确建立数据表后显示的页面内容
7.3 扩展知识——数据库编程
7.3.3 JDBC概述
• JDBC是Java Database Connectivity的简称,中
文翻译为Java数据库连接,它由一组用Java语言
编写的类和接口组成,是一种用于在关系型数据
库系统中执行SQL语句的Java应用程序接口
(Java API),是实现Java语言和各种数据库之
间独立连接的工业标准。
• JDBC为程序开发人员提供了一个标准的API,使
他们能够用纯Java API的方式编写数据库应用程
序,为各种关系型数据库系统提供统一的Java程
序访问接口。
7.3 扩展知识——数据库编程
• 简单地说,JDBC可以做三件事:创建与数
据库的连接、发送需要执行的SQL语句和
处理数据库返回的结果。
• 如果需要使用Java与某一个数据库系统连
接,并进行相应的数据操作,则需要下面
的几个步骤。1.装载驱动程序 2.建立与
数据库的连接 3.执行SQL语句
7.3 扩展知识——数据库编程
7.3.4 在Eclipse中增加MySQL数据库的支持
• 在Eclipse中编译程序,需要将支持MySQL数
据库的JDBC包添加到项目的构建路径中。
• MYSQL5.1的JDBC驱动程序是mysqlconnector-java-5.1.2-beta.zip,可以通过网络
下载,解压缩后放到JDBC驱动程序的位置
(比如放在C:\eclipse-SDK-3.4.1-win32\目录
下)。
7.3 扩展知识——数据库编程
• “JavaQQ 2.0属性”对话框的“Java构建路径”
选项内容
7.4 扩展实例
• 扩展实例同样包含两个部分,一个是服务器端程序
(JQQServer.java),其主要功能是:
• 接受客户的注册和登录请求,并在数据库中进行相应的操
作;
• 客户正确登录后,在用户列表中列出客户的信息;
• 接收已登录客户发送来的消息,并将消息转发给其他已经
登录的客户端程序;
• 监听客户的关闭请求,并在用户列表及数据库中完成相应
的操作。
• 另一个是客户端程序(JQQClient.java),其通过用户输
入的IP地址与服务器端程序相连接,并将用户输入的消息
发送给服务器端,同时接收服务器端发送来的其他客户机
的消息。
7.4 扩展实例
7.4.1 编写步骤
1. 创建数据库
2. 客户端程序JQQClient.java主要代码清
单
3. 服务器端程序JQQServer.java主要代码
清单
7.4 扩展实例
• 7.4.2 运行结果
• 编写完成后,测试并运行程序。
客户端向服务器注册/登录的程序
谢谢!