第一章 Java 程序设计技术
概述 什么是 Java 语言 一个简单的 Java 程序 程序的编译和运行 常见错误 使用 Java 核心 API 文档
什么是 Java 语言 前身是 1991 年由美国 Sun 公司的 Jame Gosling 、 Bill Joe 等人开发的 Oak 语言 Java 是一种功能强大的程序设计语言,既 是开发环境,又是应用环境,它代表一种 新的计算模式
什么是 Java 语言 面向对象的程序设计语言 与机器无关的二进制格式的类文件 Java 虚拟机(用来执行类文件) 完整的软件程序包(跨平台的 API 和库)
Java 语言的特点 语法简单,功能强大 类似于 C++ ,去掉了 C++ 中不常用且容易出错的地方 完全的面向对象 分布式与安全性 强调网络特性,内置 TCP/IP 、 HTTP 、 FTP 协议类库 三级代码安全检查机制 与平台无关 一次编写,到处运行
Java 语言的特点 解释编译两种运行方式 just-in-time 编译器,简称 JIT 编译器 多线程 动态执行 执行代码是在运行时动态载入的 丰富的 API 文档和类库
经典的系统架构 主机架构 集中处理,集中管理,各用户分享使用计算机 资源。这种模式下,可移植性差,扩充系统费 用较大 个人计算机( PC ) 本地处理,本地管理,各用户独占系统资源, 管理维护费用直线上升
Java 的三层架构 Java 计算模式 结合了上述两种模式的优势,它可用于客户 / 服 务器架构,将公共使用的程序放到应用程序服 务器上,用户使用时从服务器上下载到客户端, 各用户独立使用设备和程序。当程序更新时, 只需在服务器上进行。不必在客户端做任何维 护工作,达到 “ 零管理 ” 的理想目标。
Java 语言的目标 创建一种面向对象的语言 提供一种解释环境 这可以缩短系统开发的编译-连接-装载-测 试周期,提高开发速度。 去掉了影响代码健壮性的功能 如指针结构及程序员负责的内存分配与释放。
Java 语言的目标 为程序运行多线程提供了方法 允许程序下载代码模块 在程序运行生命期内可以动态修改 检查下载的代码模块,提供了保证安全的 一种手段
Java 虚拟机 Java 虚拟机( Java virtual machine , JVM ) 是运行 Java 程序必不可少的机制。 编译后的 Java 程序指令并不直接在硬件系统的 CPU 上执行,而是由 JVM 执行。 JVM 是编译后的 Java 程序和硬件系统之间的接 口,程序员可以把 JVM 看作一个虚拟的处理器。 它不仅解释执行编译后的 Java 指令,而且还进 行安全检查。 JVM 是 Java 程序能在多平台间进行无缝移植的 可靠保证,同时也是 Java 程序的安全检验引擎。
Java 虚拟机 JVM 的定义 JVM 是在一台真正的机器上用软件方式实现的 一台假想机 JVM 的具体实现 指令集(等价于 CPU 的指令集)、寄存器组、 类文件格式、栈、垃圾收集堆、内存区 JVM 代码格式为压缩的字节码,效率较高 JVM 的实现叫做 Java 运行时系统或运行时环境 ( Runtime Environment ),简称为运行时
Java 虚拟机的性能 Java 解释器经过优化,字节码的执行速度 已有很大提高 在字节码执行之前先经过 JIT 编译器进行编 译,生成针对具体平台的本机执行代码。 执行效率可比解释执行的效率大幅度提高。 并仍不失跨平台的特点
Java 虚拟机的性能 Hotspot 技术 是 Sun 公司推出,为根本上解决 Java 程序的效 率问题。它提供对代码的运行时选择。在程序 执行时,对每个字节码指令进行分析,根据它 的执行次数,动态决定它的执行方式
垃圾收集 程序员不必亲自释放内存 后台系统级线程,记录每次内存分配的情况, 并统计每个内存指针的引用次数。 垃圾收集自动进行,无需用户释放内存, 消除了内存漏洞
代码安全 语言定义 public protected private final 取消指针 自动回收垃圾 bytecode 检查 限定对象的存取权限 系统堆栈溢出 参数类型一致 程序执行系统 WWW 浏览器 限制 Java 小应用程序的不正当使用 Java 源程序 (.java 文件 ) Java 编译器 Java bytecode(.class 文件 ) bytecode 下载器 bytecode 解释器 系统执行平台
代码安全 对于 Applet ,因其是从其他机器上通过网络 下载到本机执行的,程序中可能隐藏某些 非法操作,所以在 Applet 运行之前,系统要 对之进行严格的三级代码安全检查,即验 证、分析和跟踪监测。
代码安全 JDK 1.0 版本中,安全模型是所谓的 “ 沙箱 ” 模型 JDK 1.1 版本中,使用 “ 签名 Applet ” Java 2 允许用户自己设定相关的安全级别
代码安全 Java 解释器 Java 解释器只能执行为 JVM 编译的代码 Java 解释器有三项主要工作: (1) 下载代码--由类下载器完成 (2) 校验代码--由字节码校验器完成 (3) 运行代码--由运行时解释器完成
代码安全 类下载器 从 Internet 网上下载类文件 类下载器把本地文件系统的类名空间和网络源 输入的类名空间区分开来,以增加安全性
代码安全 字节码校验器 检查代码的安全性,代码段的格式,并使用规则来 检查非法代码段 主要检查以下几项内容: (1) 类遵从 JVM 的类文件格式。 (2) 不出现访问违例情况。 (3) 代码不会引起运算栈溢出。 (4) 所有运算代码的参数类型总是正确的。 (5) 不会发生非法数据转换,如把整数转换为指针。 (6) 对象域访问是合法的。
开发环境 开发环境的安装 安装 JDK 设置环境变量 PATH = C:\Program Files\Java\jdk1.5.0\bin; CLASSPATH =. ; c:\ Program Files\Java\ jdk1.5.0\LIB;c:\Program Files\Java\ jdk1.5.0\demo
JDK 目录结构 C:\ Jdk1.5.0 bin lib javac java appletviewer 用户类文件所在目录 c:\java\examples\applications 当前目录 jre demo
Java 程序 Java 应用程序( Java Application ) Java 小应用程序( Java Applet )
Java 应用程序例 public class HelloWorldApp{ public static void main (String args[ ]) { System.out.println ("Hello World!"); } 编译命令 运行命令运行结果
程序的编译和运行 编译 源文件是文本形式的文件,经过编译,生 成二进制格式的字节码类文件 Java 编译器 : “ javac ” $ javac HelloWorldApp.java
运行 Java 的解释器是 “ java.exe ” java 和 javac 一般放在 $JAVA_HOME/bin 目 录中,系统配置文件的 PATH 变量中应包含 该目录 $ java HelloWorldApp
常见错误 编译时错误 javac: Command not found 包含 javac 编译器的路径变量设置不正确 HelloWorldApp.java:3: Method printl (java.lang.String) not found in class java.io.PrintStream. System.out.printl (“Hello World!”); ^ 方法名 printl 不正确 HelloWorldApp.java:1: Public class HelloWorldapp must be defined in a file called "HelloWorldapp.java". public class HelloWorldapp{ ^ 文件定义的公有类 HelloWorldapp 的名字和文件名不匹配
常见错误 运行时错误 Can't find class HelloWorldApp 系统找不到名为 HelloWorldApp 的类文件 In class HelloWorldApp: main must be public and static main() 方法的左侧缺少 static 或 public 文件中含有的类个数错误 在一个源文件中只能定义一个公有类
常见错误 层次错误 解释:一个.java 源文件可以含有三个 “ 顶层 ” 元 素,这三个元素必须依次是: (1) 一个包说明,即 package 语句,可选 (2) 任意多个引入语句,即 import 语句 (3) 类和接口说明
常见错误 整体来看, Java 程序的结构如下: package 语句:零个或 1 个,必须放在文件开始; import 语句:零个或多个,必须放在所有类定 义之前; 公有的( public )类定义:零个或一个; 类定义:零个或多个; 接口定义:零个或多个; 源文件命名时,若文件中含有 public 类,源文件 必须与该类名字一致,注意区分大小写。
常见错误 正确的语句序列: 错误的语句顺序: package Transportation; import java.awt.Graphics; import java.applet.Applet; import java.awt.Graphics; import java.applet.Applet; package Transportation; 该例中在包说 明语句之前含 有其他语句
常见错误 错误的语句顺序: package Transportation; package House; import java.applet.Applet; 该例中含有两 个包说明语句
使用 Java API 文档 从 SUN 公司的网站上下载文档文件,假定 文件存放在 jdk 目录下,则在浏览器地址框 中输入 jdk\docs\index.html 即可以查看 JDK 文档。