已阅读5页,还剩192页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java程序设计 贾素玲王强主编陈当阳曹爽许珂编著 第一章Java概述第二章Java基本语法第三章类的定义第四章类的继承和接口的扩展第五章异常的处理和线程第六章Java的输入输出操作第七章探究java lang第八章Swing基础第九章Swing的组件第十章Applet基础第十一章JavaBean第十二章Java扩展第十三章Java与网络 第一章Java概述 本章结构 Java的由来Java的历史Java的特点Java和InternetJava 一种面向对象的语言Java字节码和虚拟机Java的垃圾回收机制创建一个Java应用程序本章小节思考题 Java的由来 Java总是和C 联系在一起 而C 则是从C语言派生而来的 所以Java语言继承了这两种语言的大部分特性 Java的语法是从C继承的 Java许多面向对象的特性受到C 的影响 目前 C和C 仍然是两种被广为使用的语言 Java的历史 Java是由JamesGosling PatrickNaughton ChrisWarth等人于1991年在SunMicrosystems公司设计出来的 开发第一个版本花了18个月 Sun于1996年初发布了Java的第一个版本 并且在几个月以后就紧接着发布了Java1 02 1996年5月又发布了Java1 1 该版本改进了旧版本 并且增加了新的类库 这已经成为Java的一个重要特点 1998年Sun公司发布了Java1 2 它强化了Java的图形处理能力 增加了一些新的类库 目前最新的Java版本是Java1 5 Java1 6正在测试的过程中 Java的特点 面向对象 Object oriented 简单 Simple 安全 Secure 体系结构中立和可移植 Architecture neutralandPortable 多线程 Multithreaded 解释执行和高性能 InterpretedandHighperformance 分布式 Distributed Java和Internet 在使用Java时 用户将从Internet下载Java字节码并在自己的计算机上运行 在Web网页中运行的Java程序叫做Applet 要使用Applet 需要有支持Java的浏览器 它可以解释字节码 Internet使Java一跃成为当今最前沿的编程语言 原因在于 Java扩展了可在电脑空间中自由传输的对象的范围 Java 一种面向对象的语言 封装就是把对象的属性和服务结合成一个独立的相同单位 并尽可能隐蔽对象的内部细节 继承特殊类的对象拥有其继承的一般类的全部属性与服务 一个类可以是多个一般类的特殊类 它从多个一般类中继承了属性与服务 这称为多继承 多态指在一般类中定义的属性或服务被特殊类继承之后 可以具有不同的数据类型或表现出不同的行为 这使得同一个属性或服务在一般类及其各个特殊类中具有不同的语义 Java字节码和虚拟机 字节码是一套在Java运行时环境下执行的高度优化的指令集 字节码需要通过Java虚拟机 JavaVirtualMachine JVM 来解释执行 将一个Java程序翻译成字节码 有助于它更容易地在一个更大范围的环境下运行 只要在各种平台上都实现Java虚拟机就可以了 在一个给定的系统中 只要系统运行时环境存在 任何Java程序就可以在该系统上运行 对Java程序进行解释也有助于它的安全性 因为每个Java程序的运行都在Java虚拟机的控制之下 Java虚拟机可以包含这个程序并且能阻止它在系统之外产生副作用 Java的垃圾回收机制 Java提供了一种内存管理技术 当对象不再使用时 Java运行时环境将删除该对象 这个过程就是垃圾回收 garbagecollection gc 在Java中 当没有对象引用指向原先分配给某个对象的内存时 该内存便成为垃圾 JVM的一个系统级线程会自动释放该内存块 垃圾收集的一个潜在的缺点是它的开销影响程序性能 Java虚拟机必须追踪运行程序中有用的对象 而且最终释放没用的对象 这个过程需要花费处理器的时间 创建一个Java应用程序 程序 ThisisasimpleJavaprogram Callthisfile example1 java classexample1 publicstaticvoidmain Stringargs System out println WelcometoBUAASEM108 创建一个Java应用程序 运行结果 本章小结 在本章中 首先介绍了Java语言的由来 它的历史和它的特点 Java与Internet的关系也使程序员备受鼓舞 Java是一种面向对象的语言 这个特点可以帮助程序员以更接近现实的角度编写程序 Java是一种解释执行语言 它的字节码和虚拟机机制是实现Java跨平台的基本保证 也是保证Java安全性的基本要素 Java的垃圾回收机制把程序员从繁杂的内存控制中解放出来 实现了内存空间的自动回收和分配 大大方便了程序员的工作 最后 本章介绍了一个简单的Java应用程序 思考题 Java语言的特点是什么 面向对象编程的三个基本特点是什么 JVM是什么 它和Java字节码有什么关系 Java垃圾回收机制各有什么优点和缺点 创建一个Java应用程序应该包括哪些基本步骤 第二章Java基本语法 本章结构 Java的数据类型和变量变量的作用域常量 关键字和标识符运算符和表达式注释If语句switch break语句For循环While和Do While循环本章小节思考题 Java的数据类型和变量 Java的数据类型整数 该组包括字节型 byte 短整型 short 整型 int 长整型 long 它们都是带符号整数 浮点型数 该组包括浮点型 float 双精度型 double 它们代表有小数精度要求的数字字符 该组包括字符型 char 它代表字符集的符号 例如字母和数字 布尔型 该组包括布尔型 boolean 它是一种特殊的类型 表示True False值 Java的数据类型和变量 Java的数据类型 Java的数据类型和变量 变量变量是Java的一个基本存储单元 在Java中 在使用变量之前需要先声明变量 变量声明通常包括三部分 变量类型 变量名 初始值 其中变量的初始值是可选的 以下是几个各种变量声明的例子 有一些包括了变量的初始化 shorts r t declaresthreeshorts s r andt ints 7 r t 15 declaresthreeints andinitializessandt chary y thevariablexhasthevalue x doublepi 3 14 declaresanapproximationofpi booleans declareabooleans 变量的作用域 变量作用域的主要类型包括 本地变量 成员变量 一般来说 一个本地变量从它的声明部分开始到代码块结束都可以被访问 成员变量是在类中声明的类或对象的成员 但不能在某一个类的方法里声明成员变量 如果在一个类的某个方法里声明一个变量 则只能在该方法中访问这个变量 也就是说该变量其实被看成是这个方法的本地变量 类中的静态方法只能访问静态变量 而不能访问非静态变量 常量 关键字和标识符 常量常量代表某一特定类型的具体值 常量有数字常量 布尔常量 字符常量和字符串常量之分 数字常量包括两种 整型常量和浮点型常量 常用的整型常量都是十进制的 整型常量还有另外两种进制 八进制和十六进制 在Java中 八进制的值通过在它的前面加一个前导0来表示 而通过前导的0 x或0X来表示一个十六进制的值 布尔常量只有两种值 true和false 字符型常量代表一个字符 Java用Unicode字符集来表示字符 常量 关键字和标识符 转义字符 常量 关键字和标识符 关键字abstract boolean break bytecase catch char class const continuedefault do double else extends final finally float forgoto if implements import instanceof int interfacelong native new package public protected privatereturn short static strictfp super switch synchronizedthis throw throws transient try void volatile while 常量 关键字和标识符 标识符标识符是赋给类 方法或是变量的名字 一个标识符可以是大写和小写字母 数字 下划线 美元符号的任意顺序组合 但不能以一个数字开始 否则容易与数字 常量相混淆 同时 Java是区分大小写的 即 VALUE 和 Value 是两个不同的标识符 运算符和表达式 算术运算符 运算符和表达式 位运算符 运算符和表达式 逻辑运算符 运算符和表达式 比较运算符 注释 在Java中 程序可以有3种实现注释的风格 文档注释 多行注释 单行注释 文档注释以 开始 以 结束 Java程序中所有重要的注释最好都写成文档注释的形式 多行注释又称为块注释 主要用来对程序进行一些补充性的说明 这类注释开始于 结束于 这两个注释符间的任何内容都将被编译器忽略 单行注释始于 在该行的末尾结束 If语句 if语句是Java中的条件分支语句 它能将程序的执行路径分为两条 if语句的完整格式如下 if 条件 语句块1 else 语句块2 switch break语句 switch语句是Java的多路分支语句 它提供了一种基于一个表达式的值来使程序执行不同部分的简单方法 因此 它提供了一个比一系列if else if语句更好的选择 switch语句的形式如下 switch 表达式 case 值1 语句块break case 值2 语句块break default 语句块break for循环 For循环的语法结构如下 for 初始化 条件 增量 语句块 在初始化部分 要为变量赋初值 该变量可以是新声明或以前声明的任何数据类型的变量 在第二部分 要给出一个表达式做条件判断 该表达式是boolean类型的 返回值为true或false 循环语句的执行取决于该返回值 最后一部分用来增加或减少计数器变量 该变量也是可选择的 并且可以在循环语句中更新 当条件判断返回false时循环将中止 While和Do While循环 当条件判断表达式值为true时执行while循环中的语句 否则将执行wile后面的语句 语法如下 while 条件判断 语句块 在do while循环中 条件判断表达式在所有的循环语句至少执行一次后才进行判断 语法如下 do 语句块 while 条件判断 常量 关键字和标识符 标识符标识符是赋给类 方法或是变量的名字 一个标识符可以是大写和小写字母 数字 下划线 美元符号的任意顺序组合 但不能以一个数字开始 否则容易与数字 常量相混淆 同时 Java是区分大小写的 即 VALUE 和 Value 是两个不同的标识符 常量 关键字和标识符 标识符标识符是赋给类 方法或是变量的名字 一个标识符可以是大写和小写字母 数字 下划线 美元符号的任意顺序组合 但不能以一个数字开始 否则容易与数字 常量相混淆 同时 Java是区分大小写的 即 VALUE 和 Value 是两个不同的标识符 数组 一维数组一维数组本质上是相同类型的对象的有序集合 通用的一维数组的声明格式是 typevar name 其中 type定义了数组的类型 类型决定了组成数组的每一个基本元素的数据类型 这样 数组的基本类型决定了数组存储的数据类型 New运算符是专门用来分配内存的运算符 在后面的章节中会进一步详细讲解 当运算符new被应用到一维数组时 它的一般形式如下 array var newtype size 其中 type指定被分配的数据类型 size指定数组中变量的个数 array var是数组变量 数组 多维数组Java并不支持多维数组 但是可以创建数组的数组 多维数组可在数组初始化时实现 在Java中 多维数组实际上是数组的数组 定义多维数组时要将每个维数放在它们各自的方括号中 例如 下面语句定义了一个名为twoCars的二维数组变量 inttwoCars newint 2 3 本章小结 本章介绍了Java的数据类型 变量 常量 关键字和标识符 同时 读者也对运算符和利用运算符优先级进行表达式赋值有了基本的了解 本章介绍了选择和循环语句 选择语句包括if else和switch break 循环语句包括for while和do while 在本章的最后 学习了Java中数组的概念和用法 主要包括一维数组和多维数组 思考题 Java中包括哪些数据类型 Java中包括哪些类型的常量 Java包括哪些类型的运算符 它们之间的优先级关系是怎么样的 Java中包括哪两种判断语句 各自的用法如何 Java中包括哪些循环跳出语句 各自的用法如何 第三章类的定义 本章结构 类基础类中的对象类中的方法构造方法多态和重载垃圾收集参数传递递规final和static关键字嵌套类和内部类本章小节思考题 类基础 类是Java的核心和本质 是Java语言的基础 Java程序中的所有元素都必须被封装在某一个类之中 封装是将代码及其处理的数据绑定在一起的一种编程机制 该机制保证了程序和数据都不受外部干扰并且不被误用 Java封装的基本单元是类 一个类定义了一些数据和代码 给定类的每个对象都包含在这个类定义的数据和代码中 正是由于这个原因 对象有时被看作是类的实例 即类是一种逻辑结构 而对象是真正存在的物理实体 当创建一个类时 程序员需要同时定义它的数据和代码 这些数据和代码被统称为类的成员 类定义的数据称为成员变量或实例变量 操作数据的代码称为成员方法或简称方法 类基础 类的通用样例class类名称 类型成员变量1 类型成员变量2 类型成员变量n 类型方法名称1 参数列表 方法体 类型方法名称2 参数列表 方法体 类型方法名称m 参数列表 方法体 类中的对象 当创建一个类时 程序员需要创建一种新的数据类型 获得类的对象的过程包含两个步骤 首先 必须声明该类类型的一个变量 这种声明只是一种简单声明 对计算机来讲 并没有实际的物理含义 第二步 需要创建一个对象的实际物理拷贝 并把对于该对象的引用赋给该变量 这是通过使用new运算符实现的 new运算符可以为对象动态分配内存空间 并返回对它的一个引用 这个引用就是new分配给对象的内存地址 然后这个引用被存储在该变量中 类中的方法 方法是类的基本组成部分之一 类中方法的基本格式如下 类型方法名称 参数列表 方法体 其中 类型指定了方法返回的数据类型 这可以是Java中任何合法有效的类型 包括程序员自己创建的类的类型 对于不返回任何值的方法 它的类型就是void 方法名称可以是任何合法的标识符 参数列表是一系列类型和标识符对 用逗号分开 参数列表可以为空 参数从本质上来讲是一种变量 它接收方法被调用时传递给方法的参数值 构造方法 构造方法在对象创建时初始化 构造方法与它所在的类同名 语法与类中的方法类似 一旦定义了构造方法 在对象创建后 在new运算符完成前 构造方法立即自动调用 构造方法没有任何返回值 因为构造方法内隐藏的类型是它自己类的类型 构造方法的任务就是初始化一个对象的内部状态 以便使创建的实例变量能够完全初始化 可以让对象马上使用 多态和重载 多态性是允许一个接口被多个同类动作使用的特性 具体使用哪个动作与应用场合有关 这是Java中面向对象编程的基础之一 多态性的概念经常被说成是 一个接口 多种方法 这意味着可以为一组相关的动作设计一个通用的接口 多态性允许同一个接口被同一类的多个动作使用 这样就降低了程序的复杂性 多态性的一个最重要应用就是实现重载 多态和重载 方法重载在Java中 同一个类中的2个或2个以上的方法可以有同一个名字 只要它们的参数声明不同即可 这时 就可以认为该方法被重载了 这个过程称为方法重载 例子如下 voidareaCaculate doublex doubley System out print areaoftherectangularis System out println x y voidareaCaculate doublex System out print areaofthecircleis System out println x x 3 1415 垃圾收集 在程序中 对变量或对象的清除从本质上来讲就是 释放 这个变量或对象所占用的内存 这个过程在Java中被称为垃圾收集 GarbageCollection Java的内存管理实际上就是对象的管理 其中包括对象内存的分配和释放 对于程序员来说 分配对象使用new关键字 释放对象时 只要将对象的所有引用赋值为null 让程序不能够再访问到这个对象 此时 该对象被称为 不可达的 gc将负责回收所有 不可达 对象的内存空间 gc在JVM中通常是由一个或一组进程来实现的 它本身也和用户程序一样占用空间 运行时也占用CPU 参数传递 按值传递 call by value 这种方法将一个参数值复制成为的正式参数从一个程序块传递到另一个程序块 这种参数传递方式不影响调用它的参数 在Java中 当程序员传递给方法的是一个简单类型时 它是按值传递的 按引用传递 call by reference 在这种方法中 参数的引用 而不是参数值 从一个程序块传递到另一个程序块 在程序块中 该引用用来访问调用中指定的实际参数 这样 对参数的改变将会影响原来的参数 Java中的对象是通过引用传递的 递规 Java支持递归 递归是指一个方法重复调用自身 也就是反复的调用自己直到符合某一个特定的标准 当判断条件为false时递归中止 递归存在两种形式 直接递归 方法只能调用自己 间接递归 方法可以调用其他方法 而被调用的方法又反过来调用第一个方法 final和static关键字 final关键字一个变量可以声明为final 这样做的目的是阻止它的内容被修改 在声明final变量的时候 程序员必须初始化这个变量 例如下面的程序段 finalintNEW 1 finalintOPEN 2 finalintSAVE 3 finalintSAVEAS 4 finalintQUIT 5 定义了上面的常量之后 在随后的程序中就可以使用NEW OPEN SAVE SAVEAS QUIT这五个标识符了 就好像它们是常数 不必担心它们的值会被改变 final和static关键字 static关键字有时候程序中需要定义一个类成员 使它的使用完全独立于该类的任何对象 Java中在成员的声明前面加上关键字static就能创建这样的成员 如果一个成员被声明为static 它就能够在它的类的任何对象创建之前被访问 而不必引用任何类对象的实例 方法和变量都可以被声明为static static成员的最常见的例子是main函数 因为main函数是程序运行的入口 所以它被声明为static 如果程序员需要通过计算来初始化static变量 就可以声明一个static程序块 该程序块仅在该类被加载时执行一次 嵌套类和内部类 在另一个类中定义的类就是嵌套类 嵌套类的范围由包含它的类的范围所界定 即如果类B被定义在类A之内 那么B为A所知 而不被A的外面所知 嵌套类可以访问嵌套它的类的成员 但嵌套类的外部类不能访问嵌套类的成员 嵌套类一般有2种类型 前面加static标识符的和不加static标识符的 嵌套类最重要的类型是内部类 innerclass 内部类是非static类型的嵌套类 它可以访问它所在外部类的所有变量和方法 可以直接引用它们 就像外部类中的其他非static类型的成员一样 本章小结 在本章中 围绕类介绍了类中的方法 构造方法 类中的方法主要包括方法的类型 参数和方法的返回值 类的构造方法是类在实例化的过程中调用的 它是一种特殊的方法 构造方法和方法都可以实现重载 参数的传递可以分为两种类型 按值传递和按引用传递 按值传递一般用于Java的简单类型 按引用传递一般用于Java的对象 递规是一种方法自我调用的过程 递规最大的优点在于使得程序更加简洁 final关键字标识的变量主要用来防止对变量内容的修改 static关键字标识的变量和方法可以直接调用而不需实例化相关的类 内部类是一种更为灵活的类定义方式 思考题 类是什么 类中包含的对象有哪些 构造方法是什么 构造方法的作用是什么 什么是重载 什么是Java的垃圾收集机制 final和static关键字各有什么作用 第四章类的继承和接口的扩展 本章结构 类的继承多级继承重写类方法final的使用和抽象类Object类接口包本章小结思考题 类的继承 继承是面向对象编程技术的一块基石 它允许程序员按照一定的层次结构创建类在Java中 被继承的类叫超类 superclass 继承超类的类叫子类 subclass 子类拥有超类定义的所有实例变量和方法 但当超类中的成员变量或方法被定义成private时 子类就不能直接访问基类的方法在子类中可以被重写 如果子类没有重写基类的方法 那子类就可以直接调用基类的方法 关键字super 在很多情况下 需要保留超类的实现细节 而子类如果要访问这些细节 必须实现对超类的上溯造型 Java是完全面向对象的语言 它使用关键字super来实现这种功能 super的作用主要有两种 调用超类的构造函数访问被子类的成员隐藏的超类成员在Java中 同一个超类可以有多个子类 多级继承 Java允许多级继承在类层次结构中 构造函数以继承的层级关系调用 从父类到子类super关键字必须是子类构造函数的第一个执行语句 无论super关键字被用到与否 这个次序都不会改变 如果子类的构造函数中没有显式地调用super 那么父类中默认的或无参数的构造函数将被执行 参见例4 6和例4 7 重写类方法 在子类中 可以通过重写类方法来屏蔽超类中的方法 如果子类中的某一个方法与它超类中的某一个方法有相同的方法名 类型和参数 则称子类中的方法重写了超类中的方法 从子类中调用子类中被重写的方法时 超类中定义的方法将被隐藏 参见例4 8和例4 9 final的使用 在继承中 利用final可以实现两个功能 防止一个类被继承防止类中的一个方法被重写 抽象类 当超类不能创建一个方法的有意义的实现时 就需要使用抽象类 声明一个抽象类 用下面的通用形式 abstracttypename parameter list 任何含有一个或多个抽象方法的类都必须声明成抽象类 抽象类不能实例化声明一个既是abstract的又是final的类是不合法的 因为抽象类本身是不完整的 它依靠它的子类提供完整的实现参见例4 10和例4 11 Object类 Java中定义了一个名为Object的类 这个类是所有类的祖先Object类型的实例可以引用其他任何一个类的对象 接口 接口可以标志类的类别利用Java关键字interface 可以从类的实现中抽象一个类的接口 也就是说 利用接口可以指定一个类必须做什么 而不是规定它如何去做 接口主要是为支持运行时动态方法而设计的一个类要实现接口 必须通过implements关键字不同的接口之间 也可以存在继承关系 这种继承关系也是通过extends关键字来实现的 包 包是类的容器 用来保存划分的类名空间创建一个包是很简单的 只需要在某个Java源文件的第一行包含一个package命令即可由于类的位置不确定 因此必须为Java解释器指出在哪里可以找到要运行的类 这将通过CLASSPATH环境变量解决Java中用import语句来引入某一个具体的包 这个包可以是JDK中包含的系统包 也可以是用户自己开发的包 本章小结 继承是面向对象编程的一块基石 Java支持对类的简单继承和多级继承 同时也支持子类对父类方法的重写 继承使用的关键字是extends接口声明与类的声明相似 使用关键字interface 接口包括两部分 接口声明和接口主体包是一组类和接口的集合 使用关键字package定义包 import语句用来在其他程序中引用包中的类 利用不同的访问控制符可以实现不同级别的访问控制 思考题 什么是类的继承 super关键字有哪些用法 什么是多级继承 什么是接口 接口中有什么作用 Java中如何实现不同的访问控制级别 第五章异常的处理和线程 本章结构 异常的概念使用try和catch处理异常try语句的嵌套throw和throws语句finally语句 自定义的异常和Java的系统异常线程线程体线程的调度本章小结思考题 异常的概念 Java中的异常是一个描述在代码段中发生异常 也就是出错 情况的对象 当异常发生时 一个代表该异常的对象被创建并且在导致该错误的方法中被抛出 该方法可以选择自己处理异常或传递该异常异常本质上是一个在程序执行期间发生的事件 这个事件将中断正常的指令流程Java的异常处理机制有以下优点 将错误处理代码从常规代码中分离出来 从调用栈向上传送错误 对错误类型和错误差异进行分组 允许对错误进行修正 防止了程序的自动终止 使用try和catch处理异常 尽管Java运行时环境提供的默认异常处理程序对于程序的调试是很有用的 但通常程序员希望自己处理异常 它允许程序员自己修正错误它可以防止程序自动终止 为防止和处理一个运行时错误 只须把所要监控的代码放进一个try块中就可以了 在try块后 可以包括一个或多个说明程序员希望捕获的错误类型的catch子句参见例5 3 5 4 5 5 5 6 try语句的嵌套 在编程的时候 一个try语句块可以在另一个try语句块的内部 每次进入try语句块 异常的前后关系都会被推入某一个堆栈 如果一个内部的try语句不含特殊异常的catch处理程序 堆栈将弹出 而由下一个try语句的catch处理程序来检查是否与之匹配 这个过程将继续下去 直到一个catch语句匹配成功 或者是直到所有的嵌套try语句被检查耗尽 如果没有catch语句匹配 Java的运行时环境将自动处理这个异常 参见例5 7 5 8 throw和throws语句 在实际的编程中 程序员可以定义并抛出自己的异常 使用throw语句可以明确抛出某个异常如果程序员想定义并抛出自己的异常 但并不想对异常进行处理 可以使用throws语句参见例5 9 5 10 finally语句 finally创建了一个代码块 其中的代码会在一个try catch语句块执行完之后和接下去的try catch语句块之前执行 不管是否抛出异常 finally语句块都会执行finally语句在实际编程中是很有用的 当异常被引发 通常方法的执行将作一个陡峭的非线性的转向 异常甚至可以导致方法过早返回 例如 如果程序员在一个方法中打开了文件 然后写文件 最后关闭文件 如果在写文件的时候发生了异常 程序员肯定希望先恢复文件的初始状态 再关闭文件 最后再处理异常 这种情况下 finally语句就会发挥作用了参见例5 11 自定义的异常和Java的系统异常 要定义程序员自己的异常只需要定义一个Exception类的子类就可以了 Exception类自己没有定义任何方法 由于它继承了Throwable提供的一些方法Java中的内置异常通常分为两种 未经检查的异常和受检查的异常 这些异常一般是标准类RuntimeException的子类 未经检查的异常不需要被包含在任何方法的throws列表中 这些异常都可以直接由Java运行时环境直接引发 编译器不检查一个方法是否处理或引发了这些异常参见例5 12 线程 一个线程被定义为一个单一的连续控制流多任务处理是现代操作系统的核心概念之一 多任务处理有两种不同的模式 基于进程的和基于线程的 进程本质上是一个执行程序 基于进程的多任务处理的特点是允许计算机同时运行两个或更多的程序在Java中 线程可以有不同的状态 有不同的优先级 线程体 构造线程体的这两种方法是各有特点的 在实际的编程中 程序员可以根据自己的习惯和实际的应用场合来选择使用Runnable接口的特点如下 可以将CPU处理时间 代码和数据分开 形成清晰的模型可以从其他类继承保持程序风格的一致性直接继承Thread类的特点如下不能再从其他类继承编写简单 可以直接操纵线程 无需使用currentThread方法参见例5 13 5 14 线程的调度 Java提供一个线程调度器来监控程序启动后进入就绪状态的所有线程 线程调度器按照线程的优先级来决定应调度哪些线程来执行线程的优先级用数字来表示 范围从1到10 即从Thread MIN PRIORITY到Thread MAX PRIORITY 一个线程的缺省优先级是5 即Thread NORM PRIORITYJava通过wait notify和notifyAll方法解决了线程间通信的问题参见例5 15 本章小结 Java的异常处理机制对Java的运行时错误进行了良好的封装和屏蔽 异常处理主要是处理程序执行时产生的错误和不正常状态try catch throw finally和throws是异常处理中的关键字 利用这些关键字可以实现对所有异常的处理Java不仅自身定义了许多系统级的异常供程序员使用 也支持程序员自己定义异常多线程使程序能充分利用CPU可用时间 实现系统资源的最优配置Java中通过Thread类和Runnable接口提供了多线程处理的功能Java的线程调度是通过线程调度器实现的 线程可以具有不同的优先级 Java还支持在不同线程之间的通信 思考题 什么是异常 Java中异常类的结构是怎么样的 Java的系统异常是如何分类的 什么是线程 线程的实现有哪两种方式 各有什么特点 线程之间是如何实现通信的 第六章Java的输入输出操作 本章结构 I O基础字符流概述一些字符流类字节流概述一些字节流类File类文件的读写本章小结思考题 I O基础 Java中的流是对数据传递机制的抽象 流分为两种 输入和输出 Java中所有I O操作都是使用基本字节类型完成的Java中有两种类型的流 字节流和字符流 字节流主要用来处理字节的输入和输出 字符流则是用来处理字符的输入和输出 这两种流都采用了相同的编码标准System out是标准输出流 默认情况下指的是显示器 System in是标准输入流 默认情况下指的是键盘 System err是标准错误流 默认情况下也是指显示器 字符流概述 字符流最大的优势是可以直接操作Unicode字符集字符流类的顶层结构是Reader和Writer两个类Reader类定义了Java中流式字符的输入模式 该类的所有方法在出错情况下都将引发IOException异常Writer类定义了Java的流式字符的输出模式 该类的所有方法在出错情况下也都将引发IOException异常 该类的所有方法都没有返回值 一些字符流类 CharArrayReader是一个把字符数组作为源的输入流实现CharArrayWriter是一个把字符数组作为源的输出流的实现BufferedReader这个类通过缓冲输入来提高系统对输入的响应BufferedWriter类主要的改变是重写了flush方法 该方法可以用来确保数据缓冲器的内容确实被写到实际的输出流中 用BufferedWriter类可以通过减小数据被实际写到输出流的次数而提高程序的性能参见例6 1 6 2 6 3 6 4 字节流概述 字节流类为处理字节式输入 输出提供了丰富的类库 一个字节流可以和其他任何类型的对象并用字节流类是最重要的Java流类 Java的绝大多数I O处理都是通过字节流类处理的和字符流类类似 字节流类也有两个顶层类 InputStream和OutputStreamInputStream是一个定义Java流式字节输入模式的抽象类 该类的所有方法在出错条件下会引发一个IOException异常OutputStream类定义了Java的流式字节的输出模式 该类的所有方法在出错情况下也都将引发IOException异常 该类的所有方法都没有返回值 一些字节流类 ByteArrayInputStream是一个把字节数组作为源的输入流的实现ByteArrayOutputStream是一个把字节数组作为源的输出流的实现BufferedInputStream类允许把InputStream类的任何子类 包装 成缓冲流并使它的性能得到提高BufferedOutputStream类主要的改变是重写了flush方法 该方法可以用来确保数据缓冲器确实被写到实际的输出流中PushbackInputStream类提供了一种机制来控制在没有受到破坏的情况下输入流生成了什么参见例6 5 6 6 6 7 6 8 File类 文件是大多数程序中数据的基本初始源和目的地 Java通过java io包中File类的众多方法来实现这些操作目录是包含其他文件和目录列表的File对象 当创建的File对象是目录时 isDirectory方法将返回true 可以调用list方法来提取目录内部的其他文件和目录的列表在Java中创建文件使用的是File类中的createNewFile方法 创建成功返回true 创建失败返回false 创建目录使用的是mkdir方法和mkdirs方法 mkdir方法创建一个目录 创建成功返回true 创建失败返回false参见例6 9 6 10 6 11 6 12 文件的读写 文件的读写也有字节流和字符流两种形式 其中继承了InputStream的FileInputStream和OutputStream的FileOutputStream可以以字节流形式对文件进行读写 而继承了Reader的FileReader和Writer的FileWriter可以用字符流形式对文件进行读写参见例6 13 6 14 6 15 本章小结 Java的Stream接口为复杂的I O任务提供了清晰的抽象Java中的流可以分为字符流和字节流 其中字节流的使用最为普遍 但在某些特殊情况下需要使用字符流 流是接收和发送信息的方法InputStream和OutputStream是所有字节流的顶层类 它们支持以字节形式控制输入和输出Read和Writer是字符流的顶层类 它们支持以字符形式控制输入和输出File类Java中用来处理文件的类 利用它里面的方法可以处理文件和文件夹的一些基本属性 在Java中 文件既可以用字符流的形式读写 也可以用字节流的形式读写 思考题 什么是流 什么是字符流 字符流的最大优势是什么 什么是字节流 Java是如何创建文件和文件夹的 Java是如何实现文件的读写的 第七章探究java lang 本章结构 字符串String类StringBuffer类简单类型包装器System类RunTime类Math类本章小结思考题 字符串 在Java中 字符串是作为内置对象进行处理的 在java lang这个包中 有两个专门的类可以用来处理字符串 分别是String类和StringBuffer类由于String类和StringBuffer类都在java lang中定义 因此它们可以自动的被所有程序利用String类和StringBuffer类都被定义为final 这意味这两者均不含子类 也不能被用户自定义的类继承 从而使得某些增强性能的优化可作用于普通字符串操作 String类 String类的构造函数非常多 共有13个利用String类中的方法 可以几乎实现对字符串的所有处理 例如字符串截取 比较 修改 搜索valueOf方法是定义在String类内部的静态方法 利用这个方法 可以将几乎所有的Java简单数据类型转换为String类型 是String类型和其他Java简单类型之间的一座转换桥梁参见例7 1 7 8 StringBuffer类 StringBuffer表示了可变长的和可写的字符序列 StringBuffer类可有插入其中或追加其后的字符或子字符串 还可以针对这些添加自动地增加空间 同时它通常还有比实际需要更多的预留字符 从而允许增加空间如果想在构造StringBuffer之后为某些字符预分配空间 可以使用ensureCapacity方法设置追加缓冲区的大小 使用setLength方法可以设置字符序列的长度StringBuffer的其他方法和String的方法类似参见7 10 7 11 7 12 7 13 简单类型包装器 对于在第二章中介绍的Java定义的8个简单数据类型 Java没有按照面向对象的思想进行处理在实际的系统开发过程中 有时需要对这些简单的类型建立对象表达式 Java提供了与每一个简单类型相对应的类 它们通常被称作类型包装器抽象类Number是所有数字型类型包装器的父类 Number类有6个具体的子类 双精度型 Double 浮点型 Float 字节型 Byte 短整型 Short 整型 Integer 和长整型 Long Character类是char类型的类型包装器 Boolean类是boolean类型的包装器参见例7 14 7 15 System类 System类也是java lang包中一个非常重要的类 该类中定义的方法和和变量都是静态的 该类总共有三个静态变量 in out和err 分别保存标准的输入 输出和Java运行时错误输出 使用arraycopy方法可以将一个任意类型的数组快速的从一个地方复制到另一个地方 这比使用Java编写的循环要快的多currentTimeMillis方法可以返回自从1970年1月1号零点起到现在的时间 时间单位是毫秒参见例7 16 7 17 RunTime类 Runtime类也是java lang中一个重要的类 该类封装了运行时环境 程序员可以通过调用Runtime类的静态方法getRuntime而获得对当前Runtime对象的引用使用该类的exec方法可以在多任务操作系统中让Java去执行其他进程 即用Java运行其他程序使用该类的totalMemory方法和freeMemory方法可以知道Java虚拟机内存堆的大小和剩余情况 这里的内存堆不仅仅包括物理内存 还包括一部分虚拟内存参见例7 18 7 19 Math类 Math类也是java lang中的一个类 它保留了一些常用的数学函数 是Java中的数学工具包 和System类一样 它里面定义的所有变量和方法都是静态的Math类中定义的方法非常多 包括了所有用于几何学 三角学以及几种一般用途方法的浮点函数 主要分为四类 三角和反三角函数 指数函数 各种不同的舍入函数 其他函数参见表7 1 7 2 7 3 本章小结 java lang包是最重要的Java包之一 每一个Java程序都会自动倒入这个包 它里面有很多类和接口String和StringBuffer是两个专门用来处理字符串的类 String表示了定长 不可变的字符序列 而StringBuffer表示了可变长的和可写的字符序列Java为8个简单类型都定义了一个类型包装器System类也是java lang包中一个非常重要的类 该类中定义的方法和和变量都是静态的 它里面的方法主要用来完成一些系统级的任务Runtime类是控制Java运行时环境的 但这个类一般不能实例化 而要通过Runtime类的静态方法getRuntime来获得对当前Runtime对象的引用Math类是Java中的数学工具包 思考题 java lang包中包含哪些类和接口 String类和StringBuffer类有何种区别 什么是简单类型包装器 它们有什么作用 System类主要包含的方法有哪些 请查找JDK1 5的帮助文档 RunTime类主要包含的方法有哪些 请查找JDK1 5的帮助文档 Math类主要包含的方法有哪些 请查找JDK1 5的帮助文档 第八章Swing基础 本章结构 Swing概述Swing的版面管理Swing的事件处理Swing的窗体和面板Swing组件的边框本章小结思考题 Swing概述 一 Swing组件不依赖本地窗口实现来提供对组件外观和行为的支持 这也意味着Swing组件能适合于所有的平台Swing特点的总结 Swing组件独立于本地窗口系统Swing组件可以在任何支持AWT的平台系统中运行Swing是100 的Java组件 具有平台无关性Swing与AWT兼容并且Swing组件能够与AWT组件交换使用Swing拥有一套丰富的 用户友好的界面元素 Swing概述 二 所有的Swing组件都被封装在javax swing这个包中 在所有的Swing组件中 JComponent类是最顶层的类 它是大多数Swing组件的父类 Swing的版面管理 Swing中用来进行版面管理的是版面管理器 LayoutManager 使用版面管理器 程序员不仅可以有秩序的排列各个Swing组件 而且当窗体的大小改变时 版面管理器就会自动更新版面来配合窗口的大小 在Java中定义的常用版面管理器如下 其中前面5个是定义在AWT中的 而第6个是Swing提供的新的版面管理器 BorderLayoutFlowLayoutGridLayoutCardLayoutGridBagLayoutBoxLayout参见例8 2 8 3 8 4 8 5 8 6 Swing的事件处理 Java的事件处理模型是授权事件模型 即一个源 source 产生一个事件 event 并把它送到一个或多个的监听器 listener 那里在Swing中 事件处理也是完全遵循授权事件模型的Swing中有一些通用的事件 ComponentEventFocusEventMouseEventMouseMotionEventWindowEventContainerEventKeyEvent参见例8 7 8 11 Swing的窗体和面板 一 Swing中的重量级组件Swing中只有四个组件不是JComponent的子类 分别是JWindow JFrame JDialog和JApplet这四个组件被称为 重量级组件 在用到这四个组件时 必须使用本地代码来画出这四个组件 即要显示窗口画面 必须使用本地操作系统的窗口资源在Swing中 这四个组件是最上层的组件 其余的所有Swing组件都必须依附于其中之一才能够显示出来 Swing的窗体和面板 二 Swing中还有其他的一些容器类组件 也可以用作其他组件的容器JPanel是Swing中最常使用的容器 它默认支持双缓冲 doubelbuffering 功能 使得JPanel在处理动画上更为流畅 JPanel默认的布局管理方式是FlowLayoutJInternalFrame的使用和JFrame几乎完全一致 唯一的不同是JInternalFrame是一个轻量级的组件 它必须依附于那四个最上层的组件之一JTabbedPane也是一种很常见的容器组件 它所实现的效果就是常见的标签页 即用户可以选择某一个标签 然后根据用户的选
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交通运输行业智能化交通城市交通数字化出行客户服务解决方案分享
- 2026年民办高校一站式学生社区高质量发展重难点与突破路径
- 2026年新材料研发领域大模型预测与分子设计应用
- 2026年砂轮裂纹径向跳动≤0.01mm检测方法
- 2026年欧美日量子科技战略与我国三足鼎立格局竞争态势分析
- 2026年江苏省平台与国家算力调度平台融合贯通经验
- 母婴护理师职业素养提升
- 2026年优化人才要素参与收入分配机制:科技成果转化股权激励方案设计
- 2026年中国能建上海总部零碳超高层建筑技术解析
- 2026年深海载人潜水器水动力外形优化设计指南
- 国家基层糖尿病防治管理指南(2025版)
- 2025至2030中国慢性偏头痛治疗行业市场深度研究与战略咨询分析报告
- 《安全生产违法行为行政处罚办法》(应急部18号令)解读
- 石棉制品工岗位现场作业技术规程
- 2026年春学期人教版初中英语八年级下册教学进度表
- (2026年)实施指南《FZT 41001-2013桑蚕绢纺原料》
- 财务分析盈利能力分析教案
- 新津区邓双100MW-200MWh独立储能电站项目环境影响报告表
- 《水溶肥生产工艺技术要求》(征求意见稿)-编制说明
- 危大工程开工前安全生产条件核查
- 【高三】主题班会:高校、高考、高三【课件】
评论
0/150
提交评论