资环学院 地理信息系 课程复习 面向对象程序设计 2010 09-12 Chap1. 绪论 1、Java 历史及发展 Java 是一种解释型的、面向对象的编程语言。历史:1991 年,SUN MicroSystem 公司的 Jame Gosling、Bill Joe等人为在电视、控制烤箱等家用消费类电子产品上进行交互式操作而开 发了一个名为 Oak 的软件。 发展:面向网络应用,类库不断丰富,性能不断提高,应用领域不断拓展。(1994 年以来) 应用:适于开发各种应用,尤其是基于网络的应用、嵌入式应用等。2、Java 语言特点 Java= “C++” - “复杂性和奇异性” + “安全性和可移植性”(1) 面向对象 Java 语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象 中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象 的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。 (2) 操作平台无关性 严格的语言定义:没有“依据机器的不同而不同” 或“由编译器决定”等字眼,最后的目标码 都是一致的。 源 程 序 Java编译器 SPARC pentium Powerpc 中间 Powerpc pentium SPARC 二进制 源 程 序 SPARC Powerpc pentium Powerpc pentium SPARC 编译器 二进制 Java解释器 编译型和解释型语言的工作模式 类、类库装载 (库)链接 Java 解释器生成与体系结构无关的字节码指令,只要安装了Java 运行时系统,Java程序就 可在任意的处理器上运行。这些字节码指令对应于 Java 虚拟机中的表示,Java 解释器得到 字节码后,对它进行转换,使之能够在不同的平台运行。 1 调入包含、继承所用到 的所有类, 内存分配 确定,变成真正可执行 编译,没有绝对地址 的机器码 不同的操作系统有不同的虚拟机。它类似一个小巧而高效的CPU。Bytecode代码是与平 台无关的是虚拟机的机器指令。Java 字节代码运行的两种方式: interpreter(解释方式) Just-in-time(即时编译):有代码生成器将字节代码转换成本机的机器代码,然后可以 以较高速度执行. (3) 安全问题 Java 是在网络环境下使用的语言,一个安全的网络至少要防止以下几种破坏的可能性: „毁灭系统资源 „消耗系统资源 „挖掘系统或个人机密 „骚扰正常工作的进行 Bytecode 的运行 ƒ加载代码 由 class(Bytecode) loader 完成。 ƒ 校验代码 由 Bytecode verifier 完成。 ƒ 执行代码 由 runtime interpreter 完成。 Java源程 Java编译器 Java 系统执行 Bytecode Bytecode 解 字节码校验 不存在伪造的指针 不违反访问权限 不非法访问对象 Java的编译与执行 不导致操作栈溢出 Java interpreter Just-in-time compiler Runtime System Operating System Hardware 2 3 (4) 多线程 Java 提供现成的类 Thread,只要继承这个类就可以编写多线程的程序。多线程机制使应用 程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设 计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很 容易地实现网络上的实时交互行为。 (5) 可移植性(跨越多个平台) (6) 分布性(克服空间上的障碍) (7) 高性能(相对于其他解释型语言) (8) 健壮性((9) Java 与 C 及 C++的区别 ƒ不再有全局变量 ƒ不再有#include 和#define 等预处理功能 ƒ不再有 structure、union 及 typedef 等 ƒ不再有函数、不再有指针、不再有多重继承 ƒ不再有 goto 语句 ƒ不再有操作符重载(Operatior Overloading) ƒ取消自动类型转换,要求强制转换 ƒ自动进行内存管理 3.Java 开发工具包括: Java源程序 (.java文件) Java编译器 Java Bytecode (.class文件) Bytecode 载入 Bytecode 解释 系统执行平台 语言定义 public protected private final 取消指针 自动回收 垃圾 Bytecode检查 限定对象的 存取权限 系统堆栈溢出 参数类型一致 程序执行系统 WWW浏览器 限制Java小应用程序 的不正当使用 Java的安全措施 ƒJavac:Java 编译器,用来将 java 程序编译成 Bytecode。 ƒJava:Java 解释器,执行已经转换成 Bytecode 的 java 应用程序。 ƒJdb:Java 调试器, 用来调试 java 程序。 ƒJavap:反编译,将类文件还原回方法和变量。 ƒjavadoc:文档生成器,创建 HTML 文件。 ƒAppletviwer:Applet 解释器, 用来解释已经转换成 Bytecode 的 java 小应用程序。 1. Java 程序结构: ƒ package 语句:零个或多个,必须放在文件开始 ƒ import 语句:零个或多个,必须放在所有类定义之前ƒ public ClassDefinition:零个 或一个ƒ ClassDefinition:零个或多个ƒ InterfaceDefinition:零个或多个 类个数:至少一个类,最多只能有一个 public 类 源文件命名:若有 public 类,源文件必须按该类命名 标识符:区分大小写 2.Java 应用程序(Java Application) ƒ 类库支持:引用其他类。 ƒ 类定义:定义程序所需的类及接口,包括其内部的变量、方法等。ƒ main()方法:应用程 序的入口,与标准 C 中 main()函数的地位是一样的。一个应用程序有且只有一个 main()方 法,main()方法必须包含在一个类中,该类即为应用程序的外部标志。 ƒ 程序注释:与 C++类似,/*…*/ //…3.Java 小程序(Java Applet) ƒ类库支持:继承 Applet 类,引用其他类。 ƒ类定义:定义程序所需的类及接口,包括其内部的变量、方法等。 ƒinit()方法:初始化,自动调用,只执行一次。 ƒstart()方法:初始化后,重入等都将自动调用。Applet 的主体,在其中可以执行一些任 务或启动相关的线程来执行任务,如 paint()方法等。 ƒstop()方法:离开 Applet 所在页面时调用,以停止消耗系统资源。 4.Java Application 举例 public class HelloWorldApp { public static void main(String args[]) { System.out.println(“Hello World!”); } } „编辑存盘:文件名和公共类名(用 public 声明) 要一致 HelloWorldApp.java „编译程序:javac HelloWorldApp.java „运行程序:java HelloWorldApp „运行结果:Hello World! public class HelloWorldApp { public static void main(String args[]) { 4 System.out.println(“Hello World!”); } } ƒ声明一个类:public class HelloWorldApp{},类名第一个字母大写。 ƒ一个类中可有很多方法, main 方法是运行程序的第一个方法,方法名的第一个字母小写。 ƒSystem.out.println 是向屏幕输出,相当于 C 中的 printf()。 class CommArg { public static void main(String args[]) { // Display command arguments int i; if( args.length > 0 ) //have some command arguments { for( i=0; i Java 小应用程序不能直接执行和使用,必须要在浏览器中执行。 ƒ运行 applet 程序: 1. appletviewer MyTest.html 2. 在浏览器中运行 ƒ 运行结果: Hello World! 理解程序: „import 语句相当于 C 语言中的 include。 „每一个 applet 都是 java.applet.Applet 的子类,用 extends 继承。 „applet 中没有 main()方法。当 applet 被浏览器运行时, init() 、start()方法等自动 执行,再调用 paint()方法。 „在 applet 中与屏幕输出有关的操作通过 Graphics 对象来实现。 „一个 Java 源文件内最多只能有一个 public 类,称为主类,且文件名必须和它同名。 import java.util.*; import java.awt.*; import java.applet.*; import java.text.*; public class MyTest extends Applet { String s1,s2,s3,s4; public void init() { s1 = getParameter("p1"); s2 = getParameter("p2"); s3 = getParameter("p3"); s4 = getParameter("p4"); } public void paint(Graphics g) { g.drawString(s1,10,10); g.drawString(s2,10,30); g.drawString(s3,10,50); 6 g.drawString(s4,10,70); } } 编辑存盘:文件名和主类名一致 编译代码:javac MyTest.java 编写 HTML 文件: MyTest.html Applet Parameter Test ƒ运行 applet 程序: 1. appletviewer MyTest.html 2. 在浏览器中运行 ƒ 运行结果: 1111111 2222222 3333333 4444444 理解程序: „从页面中获取 Applet 参数: s1 = getParameter("p1"); „在页面中设置 Applet 参数: ƒ包、类、变量、方法等命名:要体现各自的含义。 包名全部小写,io,awt 类名第一个字母要大写,HelloWorldApp 变量名第一个字母要小写,userName 方法名第一个字母要小写,setName ƒ程序书写格式:保证良好的可读性,使程序一目了然。 大括号{}的使用与对齐 语句段的对齐 在语句段之间适当空行 ƒ 程序注释:帮助了解程序的功能。 类注释 变量注释 方法注释 语句注释 语句段注释 7 Chap2. Java 语言基础 任何程序设计语言,都是由语言规范和一系列开发库组成的。如标准 C,除了语言规范外, 还有很多函数库;MS Visual C++更是提供了庞大的 APIs 和 MFC。 Java 语言也不例外,也是由 Java 语言规范和 Java 开发类库(JFC)组成的。 学习任何程序设计语言,都是要从这两方面着手,尤其是要能够熟练地使用后者。 1、Java 数据类型 2、Java 运算符和表达式 3、Java 控制语句 4、Java 类定义规范 5、Java 数组 6、Java 开发类库组成 1、Java 数据类型 (1)标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括: 类名、变量名、常量名、方法名、… Java 语言中,标识符是以字母,下划线(_),美 元符($)开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。 合法的标识符 identifier userName User_Name _sys_value $change 非法的标识符 2mail room# class (2)保留字 具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word)。 abstract break byte boolean catch case class char continue default double do else extends false final float for finally if import implements int interface instanceof long length native new null package private protected public final return switch synchronized short static super try true this throw throws threadsafe transient void while (3)常量 用文字串来表示,具有不同的类型,其定义格式为: final Type varName = value [, varName [ =value] …]; (4)变量 程序中的基本存储单元,其定义包括变量名、变量类型和作用域几个部分,定义格式为: Type varName = value [, varName [ =value] …]; 作用域:指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:局 部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。 (5)数据类型基本类型:所有基本类型所占的位数都是确定的,并不因操作系统的不同而 不同。 8 数据类型 所占位数 数的范围 char 16 0 ~65535 byte 8 -27~27-1 short 16 -215~215-1 int 32 -231~231-1 long 64 -263~263-1 float 32 3.4e-038 ~3.4e+038 double 64 1.7e-308 ~1.7e+308 引用类型: § 在 Java 中“引用”是指向一个对象在内存中的位置,在本质上是一种带有很强的完整性和 安全性的限制的指针。 § 当你声明某个类,接口或数组类型的一个变量时,那个变量的值总是某个对象的引用或 者是 null 引用。 § 指针就是简单的地址而已,引用除了表示地址而外,还象被引用的数据对象的缩影,还 提供其他信息。 § 指针可以有++、--运算,引用不可以运算。布尔型数据只有两个值 true 和 false,且它 们不对应于任何整数值 布尔型变量的定义如: boolean b=true; 字符常量 字符常量是用单引号括起来的一个字符,如‘a’,‘A’; 字符型变量 类型为 char,它在机器中占 16 位。字符型变量的定义如: char c=‘a’; //指定变量 c 为 char 型,且赋初值为'a' 整型常量 1. 十进制整数 如 123,-456,0 2. 八进制整数 以 0 开头,如 0123 表示十进制数 83,-011 表示十进制数-9。 3. 十六进制整数 以 0x 或 0X 开头,如 0x123 表示十进制数 291,-0X12 表示十进制数-18。 整型变量 类型为 byte、short、int 或 long,byte 在机器中占 8 位,short 占 16 位,int 占 32 位, long 占 64 位。整型变量的定义如: int x=123; //指定变量 x 为 int 型,且赋初值为 123 byte b = 8; short s = 10; long y = 123L; long z = 123l; 实型常量 1. 十进制数形式 由数字和小数点组成,且必须有小数点,如 0.123, .123, 123.,123.0 2. 科学计数法形式 如:123e3 或 123E3,其中 e 或 E 之前必须有数字,且 e 或 E 后面的指数必须为整数。 实型变量 类型为 float 或 double,float 在机器中占 32 位,double 占 64 位。实型变量的定义如: float x=0.123; //指定变量 x 为 float 型,且赋初值为 0.123 9 double y = 0.123F; double z = 0.123f; public class Assign { public static void main (String args[ ] ) { int x , y ; byte b = 6; float z = 1.234f ; double w = 1.234 ; boolean flag = true ; char c ; c = ‘ A ‘ ; x = 12 ; y = 300; ...... } }自动类型转换 整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后 进行运算,转换从低级到高级: 低----------------------------------------------------->高 byte,short,char—> int —> long—> float —> double 如果从高级转换成低级,则需要强制类型转换,但会导致溢出或精度下降。 如:int i = 8; byte b=(byte)i; 2、Java 运算符和表达式(1)运算符 算术运算符: + ―, ,*,/,%,++ ――, 关系运算符: >,<,>=,<=,==,!= 布尔逻辑运算符: !,&&,|| 位运算符: >>,<<,>>>,&,|,^,~ 赋值运算符: =,及其扩展赋值运算符如+= ―, =,*=,/=等。条件运算符: ?:其它:包 括分量运算符 · ,下标运算符 [] ,实例运算符instanceof,内存分配运算符new,强制类 型转换运算符 (类型),方法调用运算符 () 等。 由于数据类型的长度是确定的,所以没有长度运算符sizeof。 2)表达式 表达式是由操作数和运算符按一定的语法形式组成的符号序列。 一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值; 表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。 例: x num1+num2 a*(b+c)+d 3.14 x<=(y+z) x&&y||z (3)运算符的优先次序 1) . , [] , () 9) & 2) ++ , -- , ! , ~ , instanceof 10) ^ 3) new (type) 11) | 4) * , / , % 12) && 10 5) + , - 13) || 6) >> , >>> , << 14) ?: 7) > , < , >= , <= 15) = , += , -= , *= , /= , %= , ^= 8) == , != 16) &= , |= , <<= , >>= , >>>= 3、Java 控制语句 §分支语句:if-else, switch § 循环语句:while, do-while, for § 与程序转移有关的其它语句: break, continue, return § 例外处理语句:try-catch-finally, throw 条件语句 if-else if(boolean-expression1) { statements1; } else if(boolean-expression2) { statements2; } … else { statementsN; } 布尔表达式 boolean-expression 是任意一个返回布尔数据类型的表达式,而且必须是(比 C 或 C ++要严格)。 与 C 或 C++一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将 if 或 else 后的语句用{}括起来。 else 子句是任选的,不能单独作为语句使用,它必须和 if 语句配对使用,并且总是与离 它最近的 if 配对。 n 多分支语句 switch switch (expression) { case value1 : { statements1; break; } …… case valueN : { statementsN; break; } [default : { defaultStatements; 11 }] } §表达式 expression 的返回值类型必须是这几种类型之一:int、byte、char、short。 § case 子句中的值 valueI 必须是常量,而且所有 case 子句中的值应是不同的。 § default 子句是任选的。 § break 语句用来在执行完一个 case 分支后,使程序跳出 switch 语句,即终止 switch 语 句的执行。如果某个 case 分支后没有 break 语句,程序将不再做比较而执行下一个分支。 § switch 语句的功能可以用 if-else 语句来实现,但某些情况下,使用 switch 语句更简 炼。 循环语句 while(当型循环) [initialization] //初始化条件 while (termination){ //循环条件 body; //循环体 [iteration;] //迭代,变更循环条件 } 当表达式 termination 为 true 时,执行{}中的语句,否则终止循环。 循环语句 do-while(直到型循环) [initialization] //初始化条件 do{ body; //循环体 [iteration;] //迭代,变更循环条件 } while (termination) ; //循环条件 首先执行一遍{}中的语句,当表达式 termination 为 true 时,继续执行{}中的语句,否则 终止循环。 循环语句 for(另一种当型循环) for (initialization; termination; iteration) { body; //循环体 } initialization //初始化条件 termination //循环条件 iteration //迭代,变更循环条件 §for 语句执行时,首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行 循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。 § 初始化、终止以及迭代部分都可以为空语句(但分号不能省),三者均为空的时候,相当 于一个无限循环。 § 在初始化部分和迭代部分可以使用逗号语句,来进行多个操作。逗号语句是用逗号分隔 的语句序列。 for( int i=0, int j=10; i
还剩30页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 20 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

zhaoas01

贡献于2011-01-10

下载需要 20 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf