1、Java 讲义教师:王明军武汉大学资源与环境科学学院地理信息科学系1Chap1. 绪论1、Java 历史及发展Java 是一种解 释型的、面向对象的编程语言。历史:1991 年,SUN MicroSystem 公司的 Jame Gosling、Bill Joe 等人为在电视、控制烤箱等家用消 费类电子产品上进行交互式操作而开发了一个名为 Oak 的软件。发展:面向网络应用,类库不断丰富,性能不断提高,应用领域不断拓展。 (1994 年以来)应用:适于开发各种应用,尤其是基于网 络的应用、嵌入式应用等。2、Java 语言特点Java= “C+” - “复杂性和奇异性” + “安全性和可移植性”
2、(1) 面向对象Java 语言的 设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法, 实现了模块化和信息 隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。(2) 操作平台无关性严格的语言定义:没有“依据机器的不同而不同” 或“由编译器决定”等字眼,最后的目标码都是一致的。Java 解释 器生成与体系结构无关的字节码指令,只要安装了 Java 运行时系统, Java 程序就可在任意的处理器上运行。这 些字节码指令对应于 Java 虚拟机中的表示,Java 解释器得到字节码后,对它进行转换,使
3、之能够在不同的平台运行。源程序Java编译 器SPARCpentiumPowerpc 中间码 PowerpcpentiumSPARC二进制源程序SPARCPowerpcpentiumPowerpcpentiumSPARC编译器 二进制Java解释 器编译型和解释型语言的工作模式类、类库装载 (库)链接2不同的操作系统有不同的虚拟机。它 类似一个小巧而高效的 CPU。Bytecode 代码是与平台无关的是虚拟机的机器指令。 Java 字节代码运行的两种方式:interpreter(解释方式)Just-in-time(即时编译):有代码生成器将字节代码转换成本机的机器代码,然后可以以较高速度执行.
4、(3) 安全问题Java 是在网 络环境下使用的语言,一个安全的网络至少要防止以下几种破坏的可能性:毁灭系统资源消耗系统资源挖掘系统或个人机密骚扰正常工作的 进行 Bytecode 的运行加载代码由 class(Bytecode) loader 完成。 校验代码由 Bytecode verifier 完成。 执行代码由 runtime interpreter 完成。编译,没有绝对地址 调入包含、继承所用到的所有类, 内存分配确定,变成真正可执行的机器码 Java源程序(.java文件)Java编译 器Java Bytecode(.class文件 ) 系统执行平台Bytecode 解释器Byte
5、code 载入器字节码校验器不存在伪造的指针不违反访问权限不非法访问对象不导致操作栈溢出 Java的编译与执行JavainterpreterJust-in-timecompilerRuntime SystemOperating SystemHardware3(4) 多线程Java 提供 现成的类 Thread,只要继承这个类就可以编写多线程的程序。多 线程机制使应用程序能够并行执行,而且同步机制保 证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循 环机制, 这样就很容易地实现网络上的实时交互行为。(5) 可移植性(跨越多个平台)(
6、6) 分布性(克服空间上的障碍)(7) 高性能(相对于其他解释型语言)(8) 健壮性((9) Java 与 C 及 C+的区别不再有全局变量不再有#include 和#define 等预处理功能不再有 structure、union 及 typedef 等不再有函数、不再有指针、不再有多重继承不再有 goto 语句不再有操作符重载(Operatior Overloading)取消自动类型转换,要求强制 转换自动进行内存管理3Java 开发工具包括:Java源程序(.java文件 )Java编译 器Java Bytecode(.class文件)Bytecode 载入器Bytecode 解释器系统
7、执行平台语言定义publicprotectedprivatefinal取消指针自动回收垃圾Bytecode检查限定对象的存取权限系统堆栈溢出参数类型一致程序执行系统WWW浏览 器限制Java 小应用程序的不正当使用Java的安全措施4Javac:Java 编译器,用来将 java 程序编译成 Bytecode。Java:Java 解释器, 执行已经转换成 Bytecode 的 java 应用程序。Jdb:Java 调试器, 用来调试 java 程序。Javap:反编译,将类文件还原回方法和 变量。javadoc:文档生成器 ,创建 HTML 文件。Appletviwer:Applet 解释器,
8、 用来解释已经转换成Bytecode 的 java 小应用程序。1. Java 程序结构: package 语句:零个或多个,必须放在文件开始 import 语句:零个或多个,必须放在所有类定义之前 public ClassDefinition:零个或一个 ClassDefinition:零个或多个 InterfaceDefinition:零个或多个类个数:至少一个类,最多只能有一个 public 类源文件命名:若有 public 类,源文件必须按该类命名标识符:区分大小写2.Java 应用程序(Java Application) 类库支持:引用其他类。 类 定 义:定义程序所需的类及接口,包
9、括其内部的变量、方法等。 main()方法:应用程序的入口,与标准 C 中 main()函数的地位是一 样的。一个 应用程序有且只有一个 main()方法,main()方法必须包含在一个类中,该类即为应用程序的外部标志。 程序注释:与 C类似,/* */3.Java 小程序( Java Applet)类库支持:继承 Applet 类,引用其他 类。类定义:定义程序所需的类及接口,包括其内部的 变量、方法等。init()方法:初始化,自动调用,只执行一次。start()方法:初始化后,重入等都将自动调用。 Applet 的主体,在其中可以执行一些任务或启动相关的线程来执行任务,如 paint()
10、方法等。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 HelloW
11、orldApp public static void main(String args) 5System.out.println(“Hello World!”);声明一个类:public class HelloWorldApp ,类名第一个字母大写。一个类中可有很多方法, main 方法是运行程序的第一个方法,方法名的第一个字母小写。System.out.println 是向屏幕输出,相当于 C 中的 printf()。class CommArgpublic static void main(String args)/ Display command argumentsint i;if( ar
12、gs.length 0 ) /have some command argumentsfor( i=0; iHello WorldJava 小应 用程序不能直接执行和使用,必须要在浏览器中执 行。运行 applet 程序: 1. appletviewer MyTest.html2. 在浏览器中运行 运行结果:Hello World!理解程序:import 语句相当于 C 语言中的 include。 每一个 applet 都是 java.applet.Applet 的子类,用 extends 继承。applet 中没有 main()方法。当 applet 被浏览器运行时, init() 、star
13、t()方法等自动执行,再 调用 paint()方法。在 applet 中与屏幕输出有关的操作通过 Graphics 对象来实现。一个 Java 源文件内最多只能有一个 public 类,称 为主类,且文件名必 须和它同名。import java.util.*;import java.awt.*;import java.applet.*;import java.text.*;public class MyTest extends AppletString s1,s2,s3,s4;public void init()s1 = getParameter(“p1“);s2 = getParameter
14、(“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);7g.drawString(s4,10,70);编辑存盘:文件名和主类名一致编译代码:javac MyTest.java编写 HTML 文件: MyTest.htmlApplet Parameter Test运行 applet 程序: 1. appletviewer MyTest.html2.
15、 在浏览器中运行 运行结果:1111111222222233333334444444理解程序:从页面中获取 Applet 参数:s1 = getParameter(“p1“);在页面中设置 Applet 参数:包、 类、变量、方法等命名:要体现各自的含义。包名全部小写,io,awt类名第一个字母要大写,HelloWorldApp变量名第一个字母要小写, userName方法名第一个字母要小写, setName程序书写格式:保证良好的可读性,使程序一目了然。大括号的使用与对齐 语句段的对齐在语句段之间适当空行 程序注释:帮助了解程序的功能。类注释 变量注释方法注释 语句注释语句段注释8Chap2
16、. 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)标识符程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifi
17、er)包括:类名、变量名、常量名、方法名、 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 ex
18、tends 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
19、 = value , varName =value ;(4)变量程序中的基本存储单元,其定 义包括变量名、 变量类型和作用域几个部分,定义格式为:Type varName = value , varName =value ;作用域:指可访问变量的一段代码,在程序中不同的地方声明的 变量具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。(5)数据类型基本类型:所有基本类型所占的位数都是确定的,并不因操作系 统的不同而不同。数据类型 所占位数 数的范围 char 16 0 965535byte 8 -272 7-1short 16 -2152 15-1i
20、nt 32 -2312 31-1long 64 -2632 63-1float 32 3.4e038 3.4e 038 double 641.7e308 1.7e 308引用类型: 在 Java 中“引用” 是指向一个对象在内存中的位置,在本质上是一种带有很强的完整性和安全性的限制的指针。 当你声明某个 类,接口或数组类型的一个变量时,那个变量的值总是某个对象的引用或者是 null 引用。 指针就是简单的地址而已,引用除了表示地址而外, 还象被引用的数据对象的缩影,还提供其他信息。 指针可以有+、- 运算,引用不可以运算。布尔型数据只有两个值 true 和 false,且它 们不对应于任何整数
21、值布尔型变量的定义如: boolean b=true; 字符常量字符常量是用单引号括起来的一个字符,如 a,A;字符型变量类型为 char,它在机器中占 16 位。字符型变量的定义如: char c=a; /指定变量 c为 char 型,且赋初值为a整型常量1. 十进制整数如 123,456,02. 八进制整数以 0 开头,如 0123 表示十 进制数 83, 011 表示十进 制数9。3. 十六进制整数以 0x 或 0X 开头,如 0x123 表示十进制数 291, 0X12 表示十进制数18。整型变量类型为 byte、short、int 或 long,byte 在机器中占 8 位, sho
22、rt 占 16 位,int 占 32 位, long 占 64位。整型变量的定义如:int x=123; /指定变量 x 为 int 型,且 赋初值为 123byte b = 8; short s = 10; long y = 123L; long z = 123l; 实型常量1. 十进制数形式由数字和小数点组成,且必 须有小数点,如 0.123, .123, 123.,123.02. 科学计数法形式如:123e3 或 123E3,其中 e 或 E 之前必须有数字,且 e 或 E 后面的指数必须为整数。实型变量类型为 float 或 double,float 在机器中占 32 位, double 占 64 位。实型变量的定义如:float x=0.123; /指定变量 x 为 float 型,且赋初值为 0.123double y = 0.123F; double z = 0.123f;