




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章 Java 程序设计基础 3.1 Java 编程概况 现在你可以复习一下 Java 语言的背景材料,它的基本结构象 C/C+,但任 何用面向过程语言编写过程序的人都可以了解 Java 语言的大部分结构. 3.1.1 程序结构 Java 语言的源程序代码由一个或多个编译单元(compilation unit)组成, 每个编译单元只能包含下列内容(空格和注释除外):*一个程序包语句(package statement )*入口语句(import statements) *类的声明(class declarations) *界面声明(interface declarations) 每个 Java 的编译单元可包含多个类或界 面,但是每个编译单元最多只能有一个类或者界面是公共的。Java 的源程序代 码被编译?reg;后,便产生了 Java 字节代码。Java 的字节代码由一?copy;不依 赖于机器的指令组成,这?copy;指令能被 Java 的运行系统(runtimesystem)有 效地解释。Java 的运行系统工作起来如同一台虚拟机。在当前的 Java 实现中, 每个编译单元就是一个以.java 为后缀的文件。每个编译单元有若干个类,编 译后,每个类生成一个.class 文件。.class 文件是 Java 虚拟机能够识别的代 码。 3.1.2 注释 三种类型如下:/注释一行/*一行或多行注释*/*文档注释*/文档注释一 般放在一个变量或函数定义?reg;前,指示在任何自动生成文档系统中调入。这? copy;注释都是声明条目的描述.。 3.1.3 标识符 变量,函数,类和对象的名称都是标识符,程序员需要标识和使用的东西 都需要标识符。在 Java 语言里,标识符以字符或_,$开头,后面可以包含数字, 标识符是大小写有区别的,没有长度限制。 有效的标识符 myname ict_network Hello _sys_path $bill 例子:int a_number; char _onechar; float $bill; 关键词 abstract continue for new switch boolean default goto null synchronized break do if package this byte double implements private threadsafe byvalue else import protected throw case extends instanceof public transient catch false int return true char final interface shorttry class finally long static void const float native super while 其它保留词以下单词被保留使用:cast future generic inner operator outer rest var 3.1.4 数据类型 Java 使用五种基本类型:integer(整数),floating(浮点数),point(指针), Boolean(布尔变量),Character or String(字符或字符串)。integer 整数下边 给出的数据表示都是整数的例子:4,15,089,0xAD00 整数长度数据类型表示 8 bits byte 16 bits short 32 bits int 64 bits long floating 浮点数下边给出的数据表示都是浮点数的例子: 6.37,3.7E15,3e8 浮点数长度数据类型表示 32 bits float 64 bits double Boolean 布尔变量下边是布尔变量的两种可能取值:true false Character 字符下边给出的都是字符的例子: a t (tab) u?(unicode) String 字符串下边给出的都是字符串的例子:“This is a string literal“ “中国科学院计算所“数组你可以定义任意类型的数组 . char s; 这是字符型数组; int array; 这是整型数组;你还可以定义数组的数组. int block=new int 23; 数组边界在运行时被检测,避免堆栈溢出和内 存崩溃. 在 Java 里,数组实际上是一个对象,数组有一个成员变量:length。你可以 用这个成员函数来查看任意数组的长度. int a = new int 103; a.length; /* 10 */ a0.length; /* 3 */ 创建数组在 Java 里创建数组,你可使用两种基本方法: 一。创建一个空数组: int list=new int50; 或你可以用初始数值填充数组. String names = “Chenji“,“Yuan“,“Chun“,“Yang“ ; 相 当 于 下 面 功 能: String names; names = new String4; names0=new String(“Chenji“); names1=new String(“Yuan“); names2=new String(“Chun“); names3=new String(“Yang“); 在编译时你不能象下例那样创建静态数组。 int name50; /将产生一个编译错误你也不能用 new 操作去填充一个没定义大小的数组。 int name; for (int i=0;i = ! = 表示 lvalue+=1,+lvalue 也表示 lvalue =lvalue +1 (只要 lvalue 没有副作用)。-运算符用于表示减 1 操作。+和-运算符既可以作为前缀运算符,也可以做为后缀运算符。双目 整数运算符是:运算符操作*+加-减*乘/除%取模 +运算符用到?reg;上的例子 String s=“a=“+ a; +=运算符也 可以用于 String。注意,左边(下例中的 s1)仅求值一次。s1+=a;/s1=s1+a/ 若 a 非 String 型,自动转换为 String 型。对象运算符双目运算符 instanceof 测试某个对象是否是指定类或其子类的实例。例如:if(myObject instanceof MyClass) MyClass anothermyObject=( MyClass) myObject; 是判定 myObject 是否是 MyClass 的实例或是其子类的实例。强制和转换 Java 语言和 解释器限制使用强制和转换,以防止出错导致系统崩溃。整数和浮点数之间可 以来回 强制转换,但整数不能强制转换成数组或对象。对象不能被强制为基本类型。 3.1.6 Java 流控制 下面几个控制结构是从 C 语言借鉴的。分支结构 if/else 分支结构 if (Boolean) statemanets; else statements; switch 分支结构 switch(expr1) case expr2: statements; break; case expr3: statements; break; default: statements; break; 循环结构 for 循环结构 for (init expr1;test expr2;increment expr3) statements; While 循环结构 While(Boolean) statements; Do 循环结构 do statements; while (Boolean); 一般顺序控制 break label continue label reutrn expr; label:statement; for 循环例子下面是一个程序例子,画几条线,分别用红,绿,蓝颜色,这 段程序可能是 Java 函数的一部分: int count; for (count=1;count 当 一 个 类 包 含 一 个 abstract 成 员 函 数,这 个 类 必 须 定 义 为 abstract 类。 然 而 并 不 是 abstract 类 的 所 有 的 成 员 函 数 都 是 abstract 的。Abstract 类 不 能 有 私 有 成 员 函 数(它 们 不 能 被 实 现),也 不 能 有 静 态 成 员 函 数。 3.8 接 口 当 你 确 定 多 个 类 的 操 作 方 式 都 很 相 象 时,abstract 成 员 函 数 是 很 有 用 的。 但 如 果 你 需 要 使 用 这 ?copy;abstract 成 员 函 数, 必 须 创 建 一 个 新 类, 这 样 有 时 很 繁 琐。 接 口 提 ?copy; 了 一 种 抽 象 成 员 函 数 的 有 利 方 法。 一 个 接 口 包 含 了 在 另 一 个 地 方 实 现 的 成 员 函 数 的 收 集。 成 员 函 数 在 接 口 里 定 义 为 public 和 abstract。 接 口 里 的 实 例 变 量 是 public,static 和 final。 接 口 和 抽 象 的 主 要 区 别 是 一 个 接 口 提 ?copy; 了 封 装 成 员 函 数 协 议 的 方 法 而 不 必 强 迫 用 户 继 承 类。 例 子: public interface AudiClip /Start playing the clip. void play(); /Play the clip in a loop. void loop(); /Stop playing the clip void stop(); 想 使 用 Audio Clip 接 口 的 类 使 用 implenents 关 键 词 来 提 ?copy; 成 员 函 数 的 程 序 代 码。 class MyClass implements AudioClip void play() void loop void stop 优 点 一 个 接 口 类 可 以 被 任 意 多 的 类 实 现, 每 个 类 可 以 共 享 程 序 接 口 而 不 必 关 心 其 它 类 是 怎 样 实 现 的。 class MyOtherClass implements AudioClip void stop() . 内 部 成 员 函 数 Java 还 提 ?copy; 了 调 用 C 和 C+函 数 的 方 法。 用 native 关 键 词 来 定 义 C 和 C+的 函 数。 public class Date int now; public Date() now = time (); private native int time (); static System.loadLibrary(“time“); 一 ?copy;Java 代 码 写 好 后,就 需 要 以 下 步 骤 执 行: 1.用 javah 来 创 建 头 文 件(.h) 2.用 javah 来 创 建 stub 文 件 3.用 C 和 C+写 native 成 员 函 数 的 代 码 4. 编 译 stub 文 件 和.C 文 件 成 一 个 动 态 可 加 载 库 5.用 java 运 行 java 程 序 或 appletviewer 运 行 applet 注 意:Native 成 员 函 数 超 出 了 类 的 范 围。 3.9 包(Packages) 包(Package)由 一 组 类(class)和 界 面(interface)组 成。 它 是 管 理 大 型 名 字 空 间, 避 免 名 字 冲 突 的 工 具。 每 一 个 类 和 界 面 的 名 字 都 包 含 在 某 个 包 中。 按 照 一 般 的 习 惯, 它 的 名 字 是 由“.“ 号 分 隔 的 单 词 构 成, 第 一 个 单 词 通 常 是 开 发 这 个 包 的 组 织 的 名 称。 定 义 一 个 编 译 单 元 的 包 编 译 单 元 的 包 由 package 语 句 定 义。 如 果 使 用 package 语 句, 编 译 单 元 的 第 一 行 必 须 无 空 格, 也 无 注 释。 其 格 式 如 下: package packageName; 若 编 译 单 元 无 package 语 句, 则 该 单 元 被 置 于 一 个 缺 省 的 无 名 的 包 中。 使 用 其 它 包 中 的 类 和 界 面 在 Java 语 言 里 提 ?copy; 一 个 包 可 以 使 用 另 一 个 包 中 类 和 界 面 的 定 义 和 实 现 的 机 制。 用 import 关 键 词 来 标 明 来 自 其 它 包 中 的 类。 一 个 编 译 单 元 可 以 自 动 把 指 定 的 类 和 界 面 输 入 到 它 自 己 的 包 中。 在 一 个 包 中 的 代 码 可 以 有 两 种 方 式 来 定 义 来 自 其 它 包 中 的 类 和 界 面: * 在 每 个 引 用 的 类 和 界 面 前 面 给 出 它 们 所 在 的 包 的 名 字; /前 缀 包 名 法 acme. project.FooBar obj=new acme. project. FooBar( ); * 使 用 import 语 句, 引 入 一 个 类 或 一 个 界 面, 或 包 含 它 们 的 包。 引 入 的 类 和 界 面 的 名 字 在 当 前 的 名 字 空 间 可 用。 引 入 一 个 包 时, 则 该 包 所 有 的 公 有 类 和 界 面 均 可 用。 其 形 式 如 下: / 从 ject 引 入 所 有 类 import ject.*; 这 个 语 句 表 示 ject 中 所 有 的 公 有 类 被 引 入 当 前 包。 以 下 语 句 从 acme. project 包 中 进 入 一 个 类 Employec_List。 /从 acme. project 而 引 入 Employee_List import ject.Employee_list; Employee_List obj = new Employee_List( ); 在 使 用 一 个 外 部 类 或 界 面 时, 必 须 要 声 明 该 类 或 界 面 所 在 的 包, 否 则 会 产 生 编 译 错 误。 import(引 用 ) 类 包(class package)用 import 关 键 词 调 入,指 定 package 名 字 如 路 径 和 类 名,用*匹 配 符 可 以 调 入 多 于 一 个 类 名。 import java.Date; import java.awt.*; 如 果 java 源 文 件 不 包 含 package,它 放 在 缺 省 的 无 名 package。 这 与 源 文 件 同 目 录, 类 可 以 这 样 引 入: import MyClass。 Java 系 统 包: Java 语 言 提 ?copy; 了 一 个 包 含 窗 口 工 具 箱, 实 用 程 序, 一 般 I/O,工 具 和 网 络 功 能 的 包。 java.applet 这 个 包 包 含 量 了 一 ?copy; 设 计 applet 的 类,用 一 个 类 Applet 和 三 个 接 口. AppletContext;AppletStub;和 AudioClip. java.awt 另 一 个 窗 口 工 具 箱 包.awt,包 含 了 一 ?copy; 产 生 装 饰 物 和 GUI 成 员 的 类。 这 个 package 包 括: Button,Checkbox,Choice,Component,Graphics,Menu,Pane1,TextArea 和 TextField。 java.io I/O package 包 含 文 件 输 入/输 出 类,FileInput Stream 和 File OutputStream. java.lang 这 个 包 包 含 Java 语 言 类, 包 含:对 象,线 程,异 常 出 口,系 统,整 数,原 点,数 学,字 符 等。 这 个 类 支 持 TCP/IP 网 络 协 议, 并 包 含 Socket 类,URL 和 URL 相 联 系 的 类。 java.util 这 个 类 包 含 一 ?copy; 程 序 的 同 步 类,它 包 含 Date,Dictionary 类 等。 3.10 异 常 当 在 Java 程 序 中 发 生 一 个 错 误 时, 例 如: 一 个 变 元 的 值 非 法, 代 码 会 发 现 这 个 错 误, 并 引 发 一 个 异 常 (exception)。 在 缺 省 的 情 况 下, 异 常 会 输 出 一 个 错 误 消 息, 然 后 中 止 线 程 的 执 行。 但 是, 程 序 自 己 可 以 定 义 异 常 处 理 段(exception handler)来 截 获(catch) 异 常, 并 从 错 误 中 恢 复。 有 一 ?copy; 异 常 是 由 Java 解 释 器 在 运 行 时 刻 引 发 的。 实 际 上, 任 何 类 都 可 以 定 义 属 于 自 己 的 异 常, 并 使 用 throw 语 句 引 发 它 们。 一 个 throw(引 发?copy; 语 句 是 由 throw 关 键 字 和 一 个 对 象 构 成。 按 常 规, 该 对 象 应 该 是 Exception 类 的 实 例 或 其 子 类 的 实 例。throw 语 句 会 引 起 执 行 转 向 相 应 的 异 常 处 理 段。 当 一 个 throw 语 句 执 行 时, 它 下 面 的 所 有 代 码 不 再 执 行 了, 它 所 在 的 方 法 也 不 再 返 回 值。 下 面 的 例 子 将 演 示 如 何 创 建 一 个 Exception 的 子 类, 然 后 引 发 一 个 异 常。 class MyException extends Exception class MyClass void oops() if ( /* 不 出 现 错 误 */) else /* 出 错 */ else /* 出 错 */ throw new MyException( ); 为 了 定 义 一 个 异 常 处 理 段, 程 序 必 须 用 try 语 句 把 可 能 产 生 异 常 的 代 码 成 组。 在 try 语 句 后 面 跟 上 一 个 或 多 个 catch(截 获?copy; 语 句, 每 个 异 常 对 应 一 个 catch 语 句。 每 个 catch 语 句 中 包 含 着 异 常 处 理 段。 例 如: try p.a=10; catch ( NullPointerException e) println(“p was null“); catch ( Exception e) println (“other errors occured“); catch ( Object obj) println(“Who threw that object?“); catch 语 句 和 一 个 方 法 定 义 类 似, 只 不 过 该 方 法 只 有 一 个 参 数, 且 无 返 回 类 型。 参 数 可 以 是 一 个 类 或 一 个 界 面。 当 一 个 异 常 发 生 时, 嵌 套 的 try/catch 语 句 会 寻 找 出 与 该 异 常 类 相 匹 配 的 参 数。 如 果 一 个 参 数 和 指 定 异 常 匹 配 则: * 该 参 数 和 指 定 的 异 常 是 同 一 个 类, 或 * 该 参 数 是 指 定 异 常 的 子 类, 或 * 如 果 参 数 是 一 个 界 面, 指 定 异 常 类 实 现 了 这 个 界 面。 第 一 个 参 数 和 异 常 匹 配 的 try/catch 语 句, 则 与 其 匹 配 的 catch 语 句 执 行。 在 catch 语 句 执 行 完 后, 程 序 的 执 行 被 恢 复。 但 已 不 可 能 恢 复 到 异 常 发 生 处 再 次 执 行。 例 如: print ( “now“); try print (“is“); throw new MyException( ); print (“a“); catch (MyException e) print (“the “); print (“timen“); 打 印 为“now is the time“。 正 如 这 个 例 子 所 示, 异 常 应 该 主 要 用 于 错 误 处 理, 若 用 于 其 它 方 面 会 使 代 码 晦 涩 难 ?reg;。 异 常 处 理 段 是 可 以 嵌 套 的, 允 许 异 常 处 理 可 以 发 生 在 多 个 地 方。 嵌 套 异 常 处 理 通 常 用 于 当 第 一 个 处 理 程 序 无 法 完 全 从 错 误 中 恢 复 过 来 的 时 候, 而 不 得 不 执 行 一 ?copy; 清 除 代 码。 为 了 把 异 常 处 理 控 制 传 递 给 更 高 层 的 处 理 段, 可 以 再 一 次 对 截 获 对 象 实 ?copy;throw 操 作。 注 要 再 次 实 throw 异 常 的 方 法,throw 语 句 执 行 完 后, 会 终 止 执 行。 try f. open ( ); catch(Exception e) f. close( ); throw e; 定 局 语 句 finally(定 局?copy; 语 句 是 用 于 保 证 无 论 在 异 常 是 否 发 生 的 情 况 下, 某 ?copy; 代 码 被 执 行。 下 例 说 明 finally 语 句 的 用 法: try /做 某 ?copy; 动 作; finally /此 后 清 除; 和 以 下 代 码 类 似 try / 做 某 ?copy; 动 作 catch (Object e) /此 后 清 除; throw e; /此 后 清 除; 即 使 try 块 中 包 含 return,break,continue,throw 语 句,finally 语 句 也 会 被 执 行。 例 如: 下 面 的 代 码“finally“ 总 是 被 输 出, 而“aftertry“ 仅 在 a!=10 时 被 输 出。 try if (a=10) return ; finally print (“finallyn“); print (“after try n“); 运 行 时 刻 异 常 本 节 列 出 的 清 单 是 Java 解 释 器 引 发 的 各 种 异 常。 当 运 行 时 刻 发 现 各 种 错 误, 由 解 释 器 引 发 异 常。 ArithmeticException 如 果 程 序 试 图 除 0, 或 用 0 取 模, 会 产 生 ArithmeticException(算 术 异 常?copy;, 其 它 算 术 操 作 不 会 产 生 异 常。 有 关 Java 如 何 处 理 其 它 算 术 错 误 的 信 息, 见“ 整 数 运 算 符“ 和“浮点 运 算 符“ 两 节。 例 如: 下 面 的 代 码 将 会 引 发 ArithmeticException 异 常: class Arith public static void main (String args ) int j = 0; j = j/j; NullPointerException 当 程 序 试 图 访 问 一 个 空 对 象 中 的 变 量 或 方 法, 或 一 个 空 数 组 中 的 元 素 时 则 引 发 NullPointerException(空 指 针 异 常?copy;。 例 如, 访 问 长 度 为 0 的 数 组 a0。 有 以 下 类 声 明, 运 行 时 会 引 发 NullPointerException 异 常: class Null public static void main(String args ) String o = null; int a = null; o.length( ); a0 = 0; 有 趣 的 是, 如 果 我 们 引 发 一 个 空 对 象, 也 会 产 一 NullPointerException 异 常。 IncompatibleClassChangeException 当 一 个 类 的 定 义 被 改 变, 而 引 用 该 类 的 其 它 类 没 有 被 重 新 编 译 时, 会 产 生 这 一 异 常。 有 四 种 类 更 改 会 导 致 运 行 时 刻 引 发 IncompatibleClassChangException 异 常。 * 一 个 类 中 的 变 量 声 明 由 static 变 成 非 static, 而 其 它 访 问 该 类 这 一 变 量 的 类 没 有 被 重 新 编 译。 * 一 个 类 中 的 变 量 声 明 由 非 static 变 成 static, 而 其 它 访 问 该 类 这 一 变 量 的 类 没 有 被 重 新 编 译。 * 类 中 声 明 的 某 个 域 被 删 除, 而 其 它 访 问 该 域 的 类 没 有 被 重 新 编 译。 * 类 中 声 明 的 某 个 方 法 被 删 除, 而 其 它 访 问 该 方 法 的 类 没 有 被 重 新 编 译。 ClassCastException 如 果 试 图 把 对 象 o 强 制 成 Class C, 而 o 既 不 是 Class C 的 实 例, 也 不 是 Class C 子 类 的 实 例, 这 时 便 会 产 生 ClassCastException。 class ClassCast public static void main (String args ) Object o = new Object( ); String s = (string) o; s.length( ); NagativeArraySizeException 如 果 一 个 数 组 的 长 度 是 负 数, 则 会 引 发 NagativeArraySizeException(数 组 负 下 标?copy; 异 常。 例 如 下 面 类 定 义 的 代 码 在 运 行 时 引 发 这 一 异 常: class NegArray public static void main(String args ) int a = new int -1; a0 = 0; OutOfMemoryException 当 系 统 无 法 再 向 应 用 程 序 提 ?copy; 内 存 时, 会 引 发 OutOfMemoryException(内 存 溢 出?copy; 异 常。 这 种 异 常 只 能 出 现 在 创 建 新 对 象 的 时 候, 即 new 被 调 用 的 时 候。 例 如, 下 面 一 段 代 码 在 运 行 时 刻 会 引 发 OutOfMemoryException 异 常: class Link int a = new int 1000000; Link l; Class OutOfMem public static void main(String args ) public static void main(String args ) Link root = new link( ); Link cur = root; while (true) cur.l = new Link( ); cur = cur.l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省师大附中2025届全国高三模拟考二全国I卷物理试题
- 安徽省合肥市第三十五中学2025届高三第二次模拟考试物理试卷含解析
- 课题申报书:激励高校干部新担当新作为的有效路径研究
- 课题申报书:基于虚拟实验环境的学生科学素养精准评价与人机协同干预研究
- 课题申报书:基于思维品质培养的英语课堂教学活动设计与实施研究
- 课题申报书:基于社会网络分析的外语共享调节学习评价研究:框架构建与效度验证
- 项目管理师考试复习方法试题及答案
- 课题申报书:基于开源机器人的儿童人工智能教育课程研究
- 领航中考数学试题及答案
- 课题申报书:基于OBE理念指导下的课程内容设计及其考核体系研究
- 2025年中考数学一轮复习 -第六章 圆-第二节 与圆有关的位置关系
- 创业思维-创造你喜爱的人生(浙江旅游职业学院)知到智慧树答案
- 大学物理(一)知到智慧树章节测试课后答案2024年秋湖南大学
- 中建质量样板策划实施方案
- 2024年10月自考03709马克思主义基本原理概论试题及答案含解析
- 《数字中国建设整体布局规划》解读报告
- 智慧旅游平台运营方案
- 《石油化工金属管道布置设计规范》SHT3012-2011
- 2024年大学物理磁场教案设计示范
- 国开汽车学院《项目管理》形考作业1-4答案
- 《断层解剖学》期末考试复习题库(含答案)
评论
0/150
提交评论