《Java 讲义》
教师:王明军
武汉大学资源与环境科学学院
地理信息科学系
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
(.cla
ss
文件
)
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