1 / 116

Java 语言与面向对象程序设计教程

Java 语言与面向对象程序设计教程. 主讲 : 计算机科学与技术系 周华平 E-mail:hpzhou@aust.edu.cn. 第一章 软件开发基础与 Java 语言概述. 1.1 软件开发基础 1.1.1 软件运行原理 计算机系统是由硬件和软件两大部分组成。 硬件 :中央处理单元、数学逻辑单元、内存单元、输入单元、输出单元和外存单元组成。 软件 :由程序、运行程序所需要的数据和文档三部分组成。

jory
Download Presentation

Java 语言与面向对象程序设计教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java语言与面向对象程序设计教程 主讲:计算机科学与技术系 周华平 E-mail:hpzhou@aust.edu.cn

  2. 第一章 软件开发基础与 Java 语言概述 1.1 软件开发基础 1.1.1 软件运行原理 计算机系统是由硬件和软件两大部分组成。 硬件:中央处理单元、数学逻辑单元、内存单元、输入单元、输出单元和外存单元组成。 软件:由程序、运行程序所需要的数据和文档三部分组成。 软件运行原理:软件加载到内存,CPU依次从内存取出每一条指令顺序执行,从而完成程序员事先编写好的各种数据的处理、输入、输出等操作。

  3. 1.1.2 操作系统与计算结构的发展 • (1)操作系统简介 • 功能:为应用程序提供处理机管理、内存管理、输入输出、设备管理及文件管理等,是应用程序与硬件之间的"接口"。 • PC机上常用的操作系统:DOS、Windows 98、Windows NT、UNIX、Linux 等。 • 直接运行于裸机的应用软件:应用逻辑→内存管理→输入输出→设备管理→硬件(裸机) • 操作系统管理的应用软件:应用逻辑→操作系统→硬件(裸机)

  4. (2)计算结构的发展(计算结构是指应用系统的系统体系结构,就是系统层次、模块结构)(2)计算结构的发展(计算结构是指应用系统的系统体系结构,就是系统层次、模块结构) a. 主机 - 终端模式:集中运算和集中管理是主机 - 终端模式的特点。一台主机带多个终端。主机负担太重。 b. 单机模式:个人计算机(PC)迅速发展,软件运行以孤立的机器进行。 c. 客户机/服务器模式:具有分布运算和分布管理的特点。即服务器进行汇总、综合处理;客户机实现与用户的对话及客户端的工作处理。 d. 浏览器/N层服务器模式:具有分布运算和集中管理的特点。由浏览器提供统一的用户界面。

  5. 1.1.3 软件开发过程与程序设计语言 (1)软件开发过程 • 操作系统与系统软件的开发要求更加严谨、高效、安全和方便;开发人员需要具有精深的专业知识与技能。 • 应用软件的开发是针对某个具体问题或实体,专用性强,软件间的差异性大,需求量最多。应用软件开发能力一般包括: a. 了解应用软件的背景知识 b. 分析和了解应用软件的功能和要求 c. 确定应用软件的计算结构 d. 熟悉应用软件的工作运行环境 e. 掌握开发应用软件的工具

  6. (2)程序设计语言及其发展 a. 面向机器的语言 b. 面向过程的语言 c. 面向对象的语言 1.2 Java 语言概述 1.2.1 Java 的发展历史 • 1995年5月23日,Java这种定位于网络应用的程序设计语言正式推出。 • Sun公司是这样描述:Java 是一种简单的、面向对象的、强壮的、安全的、可移植的、高性能的、体系结构中立的、解释型的、多线索的、动态的语言。

  7. 1.2.2 Java 程序的开发过程与运行环境 1、 编写源程序 例 1.1 第一个 Java 程序:MyFirstJavaProgram.java import java.io.* ; public class MyFirstJavaProgram //类头,用关键字 class 来标志一个类定义的开始。 { //类体由大括号括起来。 public static void main(String args[]) //main方法是主类标志 { System.out.println("This is my first Java program ! "); //方法体 } }

  8. 几个入门概念: (1)Java 语言标识符的字母区分大小写; (2)不允许在一个类的内部再定义另一个类,各个类之间必须是平行的,而不能嵌套; (3)一个程序可以由一个或多个类组成,其中必须有也只能有一个主类。 (4)源文件名必须与程序的主类名一致,并且以 .java 为其后缀。

  9. 2、 编译生成字节码 Java引入编译的主要原因: (1)保证程序的语法正确性; (2)通过编译引入Java类库中已编写好的模块。 (3)编译成功的结果将是一个或多个字节码文件,每个字节码文件对应源程序中定义的一个类,该文件的名字就是它所对应的类的名字,并以 .class 为统一的后缀名。

  10. 3、 运行 运行一个编译好的 Java 字节码程序,需要调用 Java 的解释器软件 java.exe 。 解释运行的三个阶段: (1)载入:Java解释器中的类载入器将字节码文件加载到内存(网上运行程序则通过网络下载到本地内存); (2)代码校验:Java解释器中的代码检验器检查这些字节码的合法性; (3)解释执行:合法的字节码程序由Java解释器逐句地解释运行。

  11. 1.2.3 Applet 与 Application Java Application 程序的主要特点: (1) Java Application 程序是独立完整的程序。 (2)在命令行调用独立的解释器软件即可运行 Java Application程序。 (3) Java Application 程序的主类必须有一个定义为: public static void main(String args[]) 的main方法,是 Java Application 程序执行的入口点。如例 1.1

  12. 例 1.2 第一个 Java Applet 程序:MyFirstJavaApplet.java import java.applet.Applet; //引入类库中定义好的java.applet.Applet 类; import java.awt.Graphics; //引入 java.awt.Graphics 类(图形类) public class MyFirstJavaApplet extends Applet //主类必须是 Applet 类的子类 { public void paint(Graphics g) { g.drawString("This is my first Java Applet!",15,20); } }

  13. (1) Java Applet 程序是在 WWW 浏览器环境下运行,即不是完整独立运行程序; (2) 运行 Java Applet 程序的解释器不是独立的软件,而是嵌在 WWW 浏览器中做为浏览器软件的一部分。 (3) Java Applet 程序中不需要有 main 方法,但是 Java Applet 程序的主类必须是类库中已定义好的类 java.applet.Applet 的子类。 (4) Java Applet 程序可以直接利用浏览器或 AppletViewer 提供的图形用户界面,而 Java Application 程序则必须另外书写专用代码来营建自己的图形界面。 (5) Java Applet 更多的具体体现状态和状态之间的切换,而不是固定的顺序化的执行过程。

  14. 第二章 Java 语言基础 2.1 Java 程序的输入输出 1. 字符界面下的输入输出:Java Application 字符界面:是指计算机程序与使用程序的用户之间通过字符模式的界面进行沟通。 例 2.1 字符界面下基本输入输出程序:SimpleCharInOut.java import java.io.*; public class SinpleCharInOut { public static void main(String args[]) { char c = ' ';

  15. System.out.print("Enter a character please:"); try{ c=(char)System.in.read(); }catch(IOException e){} System.out.println(“You’ve entered character:” + c); } }

  16. 说明: a." = "是Java语言的赋值号; b. System.in 是 java.io 包中 InputStream 类的对象,代表系统的标准输入,即键盘;read()是读数据方法。 c. System.out 是 java.io 包中 OutputStream 类的对象,代表系统的标准输出,即显示器;print()是输出方法。 d.当程序执行到 read() 方法就暂停下来,等待用户从键盘输入一个字符并按回车键。 e. read()方法读入的字符是整型 int ,采用强制类型转换(char)成为字符型 char 。 f.字符串连接运算符+。

  17. 2、 图形界面下的输入输出:Java Applet 例 2.2 图形界面下的基本输入输出程序:SimpleGraphicsInOut.java import java.applet.Applet; import java.awt.*; public class SimpleGraphicsInOut extends Applet { Label prompt; //定义显示提示信息的标签对象 TextField input; //定义接受用户键盘输入的文本区域对象 Label output; //定义回显用户输入字符的标签对象

  18. public void init() //定义浏览器打开 Applet 后的初始操作 { prompt = new Label("Enter a character pleasea: "); //创建提示标签 input = new TextField(3); //创建输入区域 output = new Label (" "); //创建输出标签 add(prompt); //将提示标签加入图形界面 add(input); //将输入区域加入图形界面 add(output); //将输出标签加入图形界面 } public boolean action(Event e,Object o)//定义对用户输入的响应 { output.setText("You've entered character:"+o.toString()); //在输出标签回显输入内容 return true; } }

  19. 说明: a. Label : java.awt 包中的 Label类,用于定义并创建图形界面的显示标签对象。 b. TextFeild : java.awt 包中的 TextFeild类,用于定义并创建图形界面的单行文本输入区域对象,用来接受用户输入的字符。 c. add : 将 Label 、TextFeild 等所创建的对象加入到图形界面的方法。 d. init() : 负责对 Java Applet 程序进行初始化的方法。 e. action() : 负责对用户的输入作响应的方法。

  20. 3、图形界面下的输入输出:Java Application 例 2.4 图形界面下的 Application 程序:GraphicsApplicationInOut.java import java.awt.*; public class GraphicsApplctInOut { public static void main(String args[ ]) { ApplctFrame MyFrame = new ApplctFrame(); } }

  21. class ApplctFrame extends Frame//定义Frame类的子类applictFrame { Label prompt; //定义提示标签对象 TextField input; //定义输入单行文本区域对象 Label output; //定义输出标签对象 ApplctFrame() //对ApplctFrame对象初始化 { super("Application Graphics Frame");//调用父类方法,指定图形界面窗口的标题 setLayout(new FlowLayout()); //指定图形界面窗口中各部件的排列方式 prompt =new Label("Enter a character please:"); //创建提示标签对象 input = new TextField(4); //创建输入单行文本区域对象 output = new Label(" "); //创建输出标签对象

  22. add(prompt); //将提示标签加入窗口 add(input); //将输入区域加入窗口 add(output); //将输出标签加入窗口 pack(); //使上述三部件间紧密相连 show(); //显示图形窗口 } public boolean action(Event e,Object o) //定义对用户输入的响应 { output.setText("You've entered character:"+o.toString()); //在输出标签回显输入内容 return true; }

  23. public boolean handleEvent(Event e)//响应用户关闭窗口的操作 { if(e.id==Event.WINDOW_DESTROY)//如果事件的id是关闭窗口,则执行退出。 System.exit(0); return super.handleEvent(e); } }

  24. 解释: 1、Java Application 应用程序下如何创建图形界面示例; 2、程序由两个类构成: (1)主类 public class GraphicsApplication (包含 main 方法:public static void main(String args[])) (2)用户自定义类 class ApplctFrame extends Frame (继承父类 Frame 的属性与方法) 3、Frame 类:框架(frame)是一个具有附加属性的空口,这些属性包括标题栏、菜单栏、边界、光标和图标映象。是类库 java.awt 包中的类。

  25. 4、自定义类 ApplctFrame 中的方法: (1)构造方法 ApplctFrame():在创建对象的同时完成对 ApplctFrame 对象初始化; (2)action() 方法:当一个动作事件发生时被调用,即定义为处理所有用户产生的事件。 (3)handleEvent() 方法:当组件接收到事件时被调用,被定义为可以处理所有类型的事件。 (4)action()方法和handleEvent()方法都是组件 Component 类中的方法; 5、Event 类:事件(event)在AWT组件中流动的事件由 Event 类的对象表示。是类库 java.awt 包中的类;

  26. 6、Component 类:组件(component)是一种用户界面对象,它可以显示在屏幕上,还可以和用户交互。这样的用户界面对象包括按钮、滚动条和文本域。是类库 java.awt 包中的类; 7、Java Application 程序从主类的 main()方法开始运行。创建一个用户自定义的 ApplictFrame类的对象,即创建一个用户图形界面窗口;

  27. 2.2 变量与数据类型 2.2.1 变量 Java 中的变量定义: a. 定义变量的名字 b. 定义变量的数据类型 如: int x ; char ch1,ch2; 其中,x、ch1、ch2 为变量名,即变量标识符; int 、char 数据类型; 标识符命名规定: (1)标识符可以由字母、数字、下划线或$符号组成,对标识符的长度没有特别限定。 (2)标识符必须以字母、下划线或$符开头。 (3)标识符区分大小写。

  28. 例 2.5 定义简单变量:VariableDefinition.java import java.awt.*; import java.applet.Applet; public class VariableDefinition extends Applet { int x = 10; char char_MyClass_Flag = 'R'; Label output1; Label output2;

  29. public void init() { output1 = new Label("定义 int 类型变量"+"x,初值为"+x); output2 = new Label("定义 char 类型变量" +"char_MyClass_Flag,初值为"+char_MyClass_Flag); add(output1); add(output2); } }

  30. 例 2.6 使用变量简化程序:VariableDefinition2.java • import java.awt.*; • import java.applet.Applet; • public class VariableDefinition2 extends Applet • { • int x = 10; • char char_MyClass_Flag = 'F'; • String prompt1 = "定义"; • String prompt2 = “类型变量”; • String prompt3 = ", 初值为";

  31. public void paint(Graphics g) • { • g.drawString(prompt1+"int"+prompt2+"x"+prompt3+x,10,20); • g.drawString(prompt1+"char"+prompt2+"char_MyClass_Flag"+prompt3+char_MyClass_Flag,10,50); • } • } • 注意: • 程序中的变量必须先定义后使用,变量的有效范围在定义它的语句所在的大括号内部(包括其中嵌套的大括号内部),一旦出了这个范围,变量就失效了。

  32. 2.2.2 数据类型 • 1、布尔型 boolean • 取值: true(真) false(假) • 例 2.8 布尔型变量的定义与初值设备:ShowBoolean.java • import java.awt.* ; • import java.applet.Applet; • public class ShowBoolean extends Applet • { • boolean b1 = true ; • boolean b2 ; //默认初值 false • String prompt1 = "boolean" ; • String prompt2 = "类型变量" ; • String prompt3 = " , 初值为" ;

  33. public void paint(Graphics g) { g.drawString( prompt1+prompt2+"b1"+prompt3+b1,10,20); g.drawString( prompt1+prompt2+"b2"+prompt3+b2,10,50); } }

  34. 2、整型 int 与字符型 char 字节型 byte 8bit * 短整型 short 16bit * 整型 int 32bit * 长整型 long 64bit * 字符型 char 16bit 注意: ** 整形变量的使用必须注意最大值和最小值,以免出现溢出。 ** 字符型变量的取值可以使用字符常量(用单引号括起来的单个字符),也可以使用整型常数。 例: chrr c_char = 'A' ; char c_int = 65 ;

  35. 注意:整型变量必须强制类型转换才能向字符变量赋值。注意:整型变量必须强制类型转换才能向字符变量赋值。 如下是错误的: int i = 65 ; char c_char = i ; // i 是整型变量,c_char 是字符型变量,无强制类型转换,错误。 正确语句如下: int i = 65 ; char c_char = (char)i ; //强制类型转换

  36. 3、浮点型 float、double * 浮点型 float 32bit * 双精度型 double 64bi float 和 double 都是浮点数据类型,程序中使用它们来表示小数。 科学计数法表示小数: 3.14E3 表示 3140 3.14E-2 表示 0.0314 float 浮点数的表示方法如: 0.0314f 或 0.0314F 3.14E-2f 或 3.14E-2F double 浮点数的表示方法如: 0.0314d 或 0.0314D 3.14E-2d 或 3.14E-2d 如果一个数没有带 f(F)或 d(D)后缀时,系统默认为 double 浮点数。

  37. 注意:将一个 double 类型的数据赋给 float 类型变量,将产生编译错误。如 float f = 3.14 ; //编译错误,因为 3.14 默认为 double 数据类型 float f = 3.14F; //正确的写法

  38. 4、类型转换 • (1)隐含类型转换:凡是把占用比特数较少的数据转换成占用比特数较多的数据为隐含类型轮换。 • (2)强制类型转换格式:(数据类型) 变量名 • 强制类型转换是将变量名的数据类型转换成括号里指定的数据类型。 • 注意:强制类型转换应防止数据溢出。如 • long l = 5 000 000 000 ; • int i = (int) l ; //因为 l=5 000 000 000 的值大于 i 的最大值 2 147 483 647 溢出错误。

  39. 2.3 表达式与运算符 2.3.1 算术运算 双目运算符: +、-、×、/、% 分别为:加、减、乘、除、取余 算术运算,用于整型与浮点型数据的运算。 单目运算符:自加 ++ ; 自减 -- 。 例 2.9 算术运算:ArithmeticOperation.java import java.applet.Applet ; import java.awt.*; public class ArithmetcOperation extends Applet { int i_x = 1; int i_y = 2; double d_x = 3.1415926; double d_y = 2.41;

  40. public void paint(Graphics g) { g.drawString(i_x+"+"+i_y+"="+(i_x+i_y),10,20); g.drawString(i_x+"-"+i_y+"="+(i_x-i_y),10,40); g.drawString(i_x+"*"+i_y+"="+(i_x*i_y),10,60); g.drawString(i_x+"/"+i_y+"="+(i_x/i_y),10,80); g.drawString(i_x+"%"+i_y+"="+(i_x%i_y),10,100); g.drawString(d_x+"+"+d_y+"="+(d_x+d_y),10,140); g.drawString(d_x+"-"+d_y+"="+(d_x-d_y),10,160); g.drawString(d_x+"*"+d_y+"="+(d_x*d_y),10,180); g.drawString(d_x+"/"+d_y+"="+(d_x/d_y),10,200); g.drawString(d_x+"%"+d_y+"="+(d_x%d_y),10,220); } }

  41. 2.3.2 逻辑运算与关系运算 1、关系运算 关系运算符:==、!=、> 、< 、>= 、<= 分别代表 等于、不等于、大于、小于、大于等于、小于等于 说明: (1)判断两数相等的等于运算符由两个等号连缀而成。一个等号是赋值号。 (2)参与比较大小的两个操作数或表达式的值可以是整型,也可以是浮点型。但是浮点型数之间作等于比较是无意义的,因为运算总有误差,通常没有绝对相等的浮点数。

  42. 例 2.10 关系运算:RelationOperation.java • import java.applet.Applet ; • import java.awt.*; • public class RelatinOperation extends Applet • { • int i_x = 1; • int i_y = 2; • double d_x = 3.1415926; • double d_y = 2.41; • public void paint(Graphics g) • { • g.drawString(i_x+">"+i_y+"="+(i_x>i_y),10,20); • g.drawString(i_x+"<"+i_y+"="+(i_x<i_y),10,40); • g.drawString(i_x+"=="+i_y+"="+(i_x==i_y),10,60); • g.drawString(i_x+"!="+i_y+"="+(i_x!=i_y),10,80); • g.drawString(i_x+">="+i_y+"="+(i_x>=i_y),10,100); • g.drawString(i_x+"<="+i_y+"="+(i_x<=i_y),10,120); • g.drawString(d_x+">"+d_y+"="+(d_x>d_y),10,160); • g.drawString(d_x+"<"+d_y+"="+(d_x<d_y),10,180); • } • }

  43. 2、逻辑运算 例 2.11 逻辑运算:LogicalOperation.java import java.applet.Applet ; import java.awt.*; public class LogicalOperation extends Applet { boolean b1 = true; boolean b2 = false; int x1 = 3 ,y1 = 5; int x2 = 3,y2 = 5; boolean b3 = x1>y1 && x1++ == y1--; boolean b4 = x2>y2 & x2++ == y2 --;

  44. public void paint(Graphics g) • { • g.drawString (b1+"&"+b2+"="+(b1&b2),10,20); • g.drawString (b1+"|"+b2+"="+(b1|b2),10,40); • g.drawString (b1+"^"+b2+"="+(b1^b2),10,60); • g.drawString ("!"+b2+"="+(!b2),10,80); • g.drawString (b1+"&&"+b2+"="+(b1&&b2),10,100); • g.drawString (b1+"||"+b2+"="+(b1||b2),10,120); • g.drawString ("x="+x1+",y="+y1,10,140); • g.drawString ("(x>y&&x++==y--)="+b3+" ;x="+x1+",y="+y1,10,160); • g.drawString ("(x>y&x++==y--)="+b4+" ;x="+x2+",y="+y2,10,180); • } • }

  45. 2.3.3 位运算 2.3.4 其他运算符 1、三目条件运算符 ? : 使用格式: x ? y : z 其规则是,先计算表达式 x 的值,若 x 为真,则整个三目运算的结果为表达式 y 的值;若 x 为假,则整个运算结果为表达式 z 的值。 例: int x = 5 , y = 8 , z = 2 ; int k = x < 3 ? y : z ; // x < 3 为假,所以 k 取 z 的值,结果为 2 . int y = x > 0 ? x : -x ; // y 为 x 的绝对值。 2、复杂赋值运算符 (材料 P.39 表 2.5 复杂赋值运算符)

  46. 3、括号与方括号 括号运算符()在某些情况下起到改变表达式运算先后顺序的作用;在另一些情况下代表方法或函数的调用。它的优先级在所有的运算符中是最高的。 方括号运算符 [] 是数组运算符,它的优先级也是很高,其具体使用方法将在后面介绍。 4、对象运算符 对象运算符 instanceof 用来测定一个对象是否属于某一个指定类或其子类的实例,如果是则返回 true ,否则返回 false 。 例: boolean b = MyObject instanceof MyClass ;

  47. 2.3.5 运算符的优先级与结合性 运算符的优先级决定了表达式中不同运算执行的先后顺序。如关系运算符的优先级高于逻辑运算符。运算符的结合性决定了并列的相同运算的先后执行顺序。如对于左结合的 “+” ,x + y + z 等价于 ( x + y ) + z ,对于右结合的 “!”, !!x 等价于 !(!x)。

  48. 第三章 Java 语言的结构化程序设计 • 3.1 算法与结构化程序设计 • 1、算法 • 任何可计算性问题的解决过程都可以转化为按指定顺序执行的一系列操作过程。由"(1)可执行的操作;(2)执行操作的顺序"组成解决问题的过程称为算法。 • 2、结构化程序设计的三种基本结构 • 顺序结构:程序中的语句按它们书写的顺序一句接一句地执行。 • 分支结构:程序根据条件,判断执行流程。 • 循环结构:程序反复执行某段程序块,直到结束条件满足。 • 结构化编程原则:自顶向下、逐步求精。 • 3.2 分支控制结构 • Java 中的分支语句有两个,一个是负责实现双分支的 if 语句,另一个是负责实现多分支的开关语句 switch 。

  49. 3.2.1 if 语句 • if 语句的一般形式是: • if (条件表达式) • 语句块 ; // if 分支 • else • 语句块 ; // else 分支 • 在编写程序时,也可以不书写 else 分支,此时若条件表达式的取值为假,则绕过 if 分支直接执行 if 语句后面的其他语句。语法格式如下: • if ( 条件表达式) • 语句块 ; // if 分支 • 其他语句 ;

  50. 例 3.1 求某班的平均成绩、及格人数和不及格人数。 import java.applet.*; import java.awt.*; public class ClassScore extends Applet { Label prompt; TextField input; int PassCount = 0; int FailureCount = 0; int TotalNumber = 0; int TotalScore = 0; double AverageScore = 0;

More Related