1、第一章 绪论1 简述 Java 技术体系的组成。Java 技术体系主要由三部分组成:Java 平台标准版 Java SE,Java 平台企业版 Java EE,以及 Java 平台微缩版 Java ME。Java SE 为 Java 桌面和工作组级应用的开发与运行提供了环境。它的实现主要包括Java SE Development Kit( JDK)和 Java SE Runtime Environment(JRE) 。Java SE 提供了编写与运行 Java Applet 与 Application 的编译器、开发工具、运行环境与 Java API。Java EE 定义了基于组件的多层企业级
2、应用的开发标准,面向企业级和高端服务器的Internet 应用开发。它基于 Java SE,包括 Enterprise JavaBeans(EJB),Java Servlets API 以及 Java Server Pages(JSP)等技术,并为企业级应用的开发提供了各种服务和工具。Java ME 是针对消费类电子设备如移动电话、电视置顶盒、汽车导航系统等的嵌入式计算的一组技术和规范。2 Java 的特征有哪些?简述这些特征的含义。Java 语言的特征包括:简单(Simple) 、面向对象(Object oriented) 、分布式(Distributed) 、解释型(Interpreted
3、) 、健壮(Robust) 、安全(Secure) 、体系结构中立(Architecture neutral) 、可移植(Portable) 、高性能(High performance) 、多线程(Multithreaded)和动态(Dynamic) 简单性:Java 语言语法和语义都比较单纯,容易学习和使用。另外,去掉 C+中的指针,取消多重继承和运算符重载,内存管理由程序员移向 Java 内嵌的自动内存回收机制等 面向对象:作为一种面向对象的编程语言,Java 不仅最为“纯洁” ,也对面向对象方法学的支持也最为全面。Java 的对象有模块化性质和信息隐藏能力,满足面向对象的封装要求,同时支
4、持继承和多态。 分布式:Java 支持的分布式计算包括两种层次:一是数据分布,即应用系统所操作的数据可以分散存储在不同的网络节点上,可以通过 Java 的 URL 类访问。二是操作分布,即应用系统的计算可通过嵌在 WWW 页面中的 Applet(小应用程序) ,分布到不同的网络节点完成。 半编译,半解释:采用编译器对程序进行编译,但编译得到的是一种中性的字节码,并不是本机代码,而字节码的执行采取解释执行方式。该特征,提高了 Java 的可移植性,并使得 Java 语言兼具编译执行的效率优势和解释执行的灵活性。 健壮性:Java 提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错
5、误。通过集成的面向对象的例外处理机制,帮助程序员正确地进行选择以防止系统的崩溃。另外,Java 是一种强类型语言,程序编译时要经过严格的类型检查,防止程序运行时出现类型不匹配等问题。 安全性:Java 在语言和运行环境中引入了多级安全措施,其采用的主要安全机制有:内存分配及布局由 Java 运行系统规定。运行系统执行基于数字签名技术的代码认证、字节码验证与代码访问权限控制的安全控制模型。 体系结构中立:Java 为了做到结构中立,除了上面提到的编译生成机器无关的字节码外,还制定了完整统一的语言文本。为了使 Java 的应用程序能不依赖于底层具体的系统,Java 语言环境还提供了一个用于访问底层
6、操作系统功能的可扩展类库,当程序使用这些库时,可以确保它能运行在支持 Java 的各种平台上。 可移植性:Java 的最大特点是“一次编程,处处运行” 。任何机器只要配备了 Java 解释器,便可运行 Java 程序。这种可移植性源于两方面:一是 Java 的半编译、半解释特征;另一方面是 Java 体系结构中立,采用标准的独立于硬件平台的数据类型。 高性能:Java 语言的字节码与机器码十分接近,使得字节码到机器码的转换十分快捷。另外,Java 还提供了即时编译技术,提高了 Java 应用的运行速度。 多线程:Java 的特点是在语言级嵌入了多线程机制,支持程序的并发处理功能。从程序的角度看
7、,一个线程就是应用程序中的一个执行流。Java 将临界区保护规则等集成到语言中实现线程同步,使这些规则的使用更加方便有效。 动态特性:Java 程序的基本组成单元是类,而 Java 的类又是运行时动态装载的,这使将 Java 可以动态地维护应用程序及其支持类之间的一致性。3 Java 语言的语法机制与 C/C+有何异同?Java 的基本语法机制,例如:数据类型、表达式、程序流控制、结构化异常处理等,都与 C+相同。明显区别于 C+的语法机制,包括类(class) 、接口(Interface) 、程序包(package) 、多线程以及取消指针。4 Java 运行系统由哪些部分组成?Java 程序
8、的运行过程是怎样的?Java 运行系统一般包括以下几部分:类装配器、字节码验证器、解释器、代码生成器和运行支持库。Java 运行系统运行的是字节码即.class 文件。执行字节码的过程可分为三步:(1) 代码的装入由类装配器装入程序运行时需要的所有代码,其中包括程序代码中调用到的所有类。当装入了运行程序需要的所有类后,运行系统便可以确定整个可执行程序的内存布局。(2) 代码的验证由字节码检验器进行安全检查,以确保代码不违反 Java 的安全性规则,同时字节码验证器还可发现操作数栈溢出、非法数据类型转化等多种错误。(3) 代码的执行Java 字节码的运行可以有两种方式:即时编译(Just-In-
9、Time)方式和解释执行方式。5 什么是 JVM?Java 虚拟机是一个想象中的,能运行 Java 字节码的操作平台。而 JVM 规范提供了这个平台的严格的规范说明,包括指令系统,字节码格式等。JVM 进一步可用软件在不同的计算机系统上实现或用硬件实现。JVM 的实现包括字节码验证、解释器、内存垃圾回收等,是上述 Java 运行系统的核心,Java 运行系统是各供应商对 JVM 的具体实现。7. 编写一个 Java 程序,在屏幕上输出“欢迎学习 Java 语言!”的字符串。public class Welcomepublic static void main (String args)Syst
10、em.out.println(“欢迎学习 Java 语言!“);第二章 面向对象程序设计基本概念1 什么是对象?什么是类?什么是实体?它们之间的相互关系是怎样的?试举例说明。在面向对象方法中,对象是现实世界实体或概念在计算机世界中的抽象表示,是具有唯一对象名、固定对外接口的一组变量/属性和方法的集合,是用来模拟组成或影响现实世界问题的一个或一组因素。类定义了对象类型,包含同一类型的对象具有共同的特征与行为。使用 class 定义的类在程序中称为一种抽象数据类型,它是面向对象程序设计语言的基本概念。一个类在定义后,我们就可以象使用其它数据类型一样,声明该类的变量并创建该变量所指向的对象,然后通过
11、该变量调用对象的方法实现对对象的操作。实体表示现实世界中,客观存在并可区分的事物或概念。在面向对象的问题求解方法中,首先对现实世界的问题域进行语义抽象,从各类对象中抽象出对象类型,并得到对象类型之间的关联,形成问题的概念模型。接下来,进行概念模型到机器(程序)模型的转换得到机器世界的模型。机器模型是由计算机能够理解和处理的类构成的。将类实例化就得到了现实世界实体的面向对象的映射对象,在程序中对对象进行操作,就可以模拟现实世界中的实体及实体之间相互作用,解决由这些实体构成的现实世界中的问题。举例来说,我们很多人都有自行车,你的自行车就是“自行车”这类交通工具中的一个实例,即现实世界的一个实体。在
12、机器世界中即程序中的自行车类包含了自行车都有相同的状态,例如两个轮子、脚踏板速度等,以及共同的行为,如刹车等,将自行车类实例化就得到了现实世界的自行车实体的映射自行车对象,在程序中对这个对象进行操作,就可以模拟现实世界中的自行车与其他实体之间相互作用。2 什么是对象的状态与行为?设有对象“学生” ,试给出这个对象的状态和行为。现实世界的对象具有两个特征:状态与行为。面向对象程序设计语言中的对象是以现实世界的对象为模型构造的,也具有状态与行为,其中状态保存在一组变量中,而对象的行为通过方法实现。“学生”的状态包括:学号、姓名、年龄、所属院系、专业方向等;“学生”的行为包括:注册、选课、基本信息维
13、护等。3 什么是封装与数据隐藏?使用对象的对外接口(方法)将对象的变量与方法实现保护起来,外界只能通过对象的接口访问对象的服务,而对对象其它成员都无法访问,就称为封装。因此,对象中的数据封装同时也实现了对象的数据隐藏。数据隐藏是通过对象成员的访问控制实现的。在Java 语言中提供了四种不同层次的访问控制,即 public,protected,default 和private,从而实现了对象四种不同程度的数据隐藏。4 什么是上溯造型?什么是晚联编?多态的含义是什么?上溯造型的含义是子类沿着类继承体系向上,将其类型塑造为父类类型,使得子类对象能够当作父类对象处理。程序中调用对象的方法时,所调用的代
14、码直到运行时刻才确定。因此,在程序编译时,编译器可以保证该方法存在并且执行参数与返回结果的类型检查,但却不知道要执行的准确代码。在运行时刻,Java 运行系统根据对象变量当时所指向对象的实际类型,调用该对象的相应方法。这种技术称为晚联编。面向对象的多态特征,简而言之就是“对外一个接口,内部多种实现” 。面向对象程序设计语言支持两种形式的多态:运行时多态和编译时多态。编译时多态主要是通过重载(Overloading)技术实现的,即在一个类中相同的方法名可用来定义多种不同的方法。运行时多态是在面向对象的继承性的基础上建立的,是运行时动态产生的多态性,是面向对象的重要特性之一。5 怎样理解面向对象程
15、序设计方法的内涵?面向对象程序设计方法的内涵,可以由对象、数据抽象、封装、继承和多态等核心概念和特征表达:程序中所有东西都是对象;程序是一系列对象的组合;每个对象都有自己的存储空间,可以容纳其它对象;每个对象都有一种类型,即都归属于一个类,类最主要的特征是对外接口;同一类型的所有对象都能够接收相同的消息,子类与父类具有“同一类型” ,这就是面向对象程序语言中的多态性。6面向对象程序设计有哪些优点?面向对象程序设计方法的主要优势是具有更好的可重用性、可扩展性、可管理与维护性。在面向对象程序设计中,可重用的代码是类和对象。数据抽象、封装、继承、多态等特征都围绕和体现了代码重用的思想。面向对象的封装
16、、继承和多态使得程序可以对一个类的内部变量和方法进行修改或增加新的变量和方法,可以按照需要派生新的子类,但仍可以保证调用这些类接口的程序不做改动,从而使程序具有很强的可扩展性与易维护性。而面向对象的数据抽象与封装,使程序具有模块化特性,这简化了程序中代码之间的关联,使程序更易于管理和控制。第三章 Java 语言基础 1.下列标识符哪些是合法的?$88,#67,num,applet,Applet,7#T,b+,-b合法的标识符:$88,num,applet,Applet2Java 有哪些基本数据类型?什么是复合数据类型?对于这两种类型的变量,系统的处理有什么不同?Java基本数据类型包括:boo
17、lean,char,byte,short,int,long,double和float复合数据类型:一般将用户定义的新类型称为复合数据类型。Java以类和接口的形式定义新类型。因此在Java中类和接口是两种用户定义的复合数据类型。对于这两种类型的变量,系统的处理方式:基本数据类型的变量包含了单个值,这个值的长度和格式符合变量所属数据类型的要求,基本类型变量声明时,系统直接给该变量分配空间,因此程序中可以直接操作。引用型变量的值是指向内存空间的引用(地址) ,声明时只是给该变量分配引用空间,数据空间未分配。引用型变量在声明后必须通过实例化开辟数据空间,才能对变量所指向的对象进行访问。3设变量i和j
18、的定义如下,试分别计算下列表达式的值。inti=1;double d=1.0(1)35/4; (2)46%9+4*4-2; (3)45+43%5*(23*3%2); (4)45+45*50%i-; (5)45+45*50%(-i); (6)1.5*3+(+d); (7)1.5*3+d+;(8)i+=3/i+3;(1)8;(2)15;(3)48;(4)45;(5)除0异常;(6)6.5;(7)5.5;(8)74计算下列逻辑运算表达式的值:(1) (true) 如果 x!=0, 为 true(4) true(5) true(6) true5Java 中有哪些类型程序流控制语句?Java 语言提供了
19、 4 类程序流控制语句: 循环语句,包括 while 语句、 do while 语句和 for 语句。 分支语句,包括 if 语句和 switch 语句。 跳转语句,包括 break 语句, continue 语句, label:语句, return 语句. 异常处理语句,包括 try-catch-finally 语句和 throw 语句。6switch 语句与 if 语句可以相互转换吗?使用 switch 语句的优点是什么?switch 语句可以转换为 if 语句,但 if 语句不一定能转换为 switch 语句。因为switch 以一个整型表达式的值作为判定条件,而 if 可以判断各种条件
20、。使用switch 结构更简单,可读性强,而且程序的执行效率也得到提高。7试写出下列循环的运行结果。Int i = 1;while(i10)if (i+)%2 =0)System.out.println(i);35798While 循环和 do 循环有什么区别?while 语句运行时,先计算逻辑表达式的值,当值为“true”时,执行循环体语句。do while 语句首先执行循环体中的语句,然后再求表达式的值,如果为“true”则继续循环;如果为“false”, 则终止循环。因此, dowhile 循环至少要执行一次循环体。9循环跳转语句break的作用是什么?试给出下列程序的运行结果。inti
21、 = 1000;while(true)if(i10)break;i = i-10;System.out.println(“The value of i is “+i);break语句用来从switch 语句、循环语句中跳出。它结束了switch语句的执行,并把控制流转移到紧跟在switch之后的语句。我们还可以使用不带标签的break语句终止循环。带标签的break 语句结束由标签指定的外层语句的执行。上述程序的运行结果是:The value of i is 010循环跳转语句continue的作用是什么?试给出下列程序的运行结果。inti = 1000;while(true)if(i10)c
22、ontinue;i = i-10;在for、while和do while循环中,continue语句跳过当前循环的其余语句,执行下一次循环。不带标签的continue语句跳过最内层的循环,并开始执行最内层循环的下一次循环。上述程序当i的值为0以后,将进入死循环。13.下列数组声明哪些是合法的?(1)inti = new int(30);(2)double d = new double30;(3)Integer r = new Integer(130);(4)inti = (3, 4, 3, 2);(5)float f = 2.3, 4.5, 5.6;(6)char c = new char()
23、;(7)Integer r = new Integer2;合法声明语句:(2)14.数组变量是基本类型变量还是引用型变量?数组的内存是在什么时候分配的?数组变量是引用型变量。数组的声明并不创建实例数组的数据空间,而是给该数组变量分配了一个可用来引用该数组的引用空间。数组元素所需的内存空间是通过 new 运算符或通过数组初始化分配的。第四章 Java 面向对象特性 1.试说明JAVA语言是如何支持多重继承的。Java中是通过接口实现多重继承的。接口(interface)机制,允许一个类实现多个接口。这样既避免了多重继承的复杂性,又达到了多继承的效果。2.类的构造方法和成员方法之间有什么区别?类的
24、构造方法是非常特殊的方法,与成员方法的区别包括:(1) 构造方法的名称必须与类名相同。(2) 构造方法不能有返回值。(3) 用户不能直接调用构造方法,必须通过关键字 new 自动调用它。5.Java中方法调用的参数传递方式是什么? Java中方法调用的参数传递方式是传值,即方法调用不会改变调用程序中作为方法参数的变量的值。当方法的参数类型是对象或数组等引用类型时,在方法中可能改变引用型参数所指向的对象的内容,但是对象的引用不会改变。6.this关键字的作用是什么?this 是 Java 使用的一个有特定意义的引用,它指向当前对象自身。7一个类中的方法,要使同一个包中的类可以访问而其它类不能访问
25、,应该使用怎样的访问控制?对于该方法不加任何访问权限限定,即使用缺省的访问权限default或package。8.什么是方法重载?方法重载的规则是什么?方法的重载是在一个类的定义中,多个方法使用相同的方法名,这些方法功能类似但参数不同。Java 中规定重载的方法必须遵循下列原则:(1) 方法的参数表必须不同,包括参数的类型或个数,以此区分不同方法体;(2) 方法的返回类型、修饰符可以相同也可不同。9.什么是方法重写?方法重写的规则是什么?重写(Overriding)是指子类重新实现从父类继承而来的成员方法。Java 中方法重写要遵守以下规则:(1) 子类中重写方法的返回值类型必须与父类中被重写
26、方法的返回值类型相同。(2) 子类中重写方法的访问权限不能缩小。(3) 子类中重写方法不能抛出新的异常。10.试说明JAVA语言中多态的含义及实现机制。多态的含义是,对外一个接口,内部多种实现。Java中的多态包括运行时多态和编译时多态。编译时多态主要是通过重载(Overloading)技术实现的,运行时多态是通过上溯造型和动态联编技术实现的。上溯造型使一个对象既可以当作它自己的类型也可以作为其父类的类型对待,这意味着子类对象可作为父类的对象使用;父类的对象变量可以指向子类对象。这样通过一个父类变量发出的方法调用,可能执行的是该方法在父类中的实现,也可能是在某个子类中的实现,这只能在运行时刻根
27、据该变量指向的具体对象类型确定,这就是运行时多态。11.给出下列程序的运行结果:class Meal Meal() System.out.println(“Meal()“); class Bread Bread() System.out.println(“Bread()“); class Cheese Cheese() System.out.println(“Cheese()“); class Lettuce Lettuce() System.out.println(“Lettuce()“); class Lunch extends Meal Lunch() System.out.printl
28、n(“Lunch()“); classPortableLunch extends Lunch PortableLunch() System.out.println(“PortableLunch()“);public class Sandwich extends PortableLunch private Bread b = new Bread();private Cheese c = new Cheese();private Lettuce l = new Lettuce();publicSandwich() System.out.println(“Sandwich()“);public st
29、atic void main(String args) new Sandwich();程序运行结果:Meal()Lunch()PortableLunch()Bread()Cheese()Lettuce()Sandwich()第五章 Java 高级特征 1举例说明类方法与实例方法以及类变量与实例变量之间的区别。类方法要通过类名访问,实例方法需要通过实例对象访问。例如,java.lang的System类中的exit()方法。类变量只在系统加载其所在类时分配空间并初始化,并且在创建该类的实例时将不再分配空间,所有的实例将共享类的静态变量。类变量在类外直接用类名调用,而不象实例变量那样需要通过实例对象
30、才能访问。例如,java.lang的System中的out变量,该变量的定义为:staticPrintStreamout,所以当我们需要向监控台输出信息时,可以在程序中直接调用System.out.println(“.”)。2什么是接口?接口的意义是什么?接口(interface)从定义形式上类似于抽象类。接口中声明了方法,但不定义方法体,因此接口只是定义了一组对外的公共接口。与类相比,接口只规定了一个类的基本形式,不涉及任何实现细节。实现一个接口的类将具有接口规定的行为。Java中规定一个类只能继承一个父类,但可以实现多个接口,因此利用接口实现了多重继承而没有强行形成类的继承关系。避免产生代
31、码冲突,保证了Java的简单性与代码的安全可靠,同时对面向对象方法论的支持更纯洁。3什么是包?如何定义包?包是Java中类和接口的一种组织、管理和使用的单位,是相关类与接口的一个集合,使类和接口易于查找和使用,并提供了独立的类命名空间和访问保护。使用 package 语句指定一个源文件中的类属于一个特定的包。Package 语句的格式如下:package pkg1.pkg2.pkg3。如果源文件中没有package语句,则指定为无名包。4什么是抽象类?抽象类与接口有何区别?抽象类是包含一个或多个抽象方法的类,只有声明而没有方法体的方法称为抽象方法。抽象类也可有构造方法、普通的成员变量或方法,也
32、可以派生抽象类的子类。但抽象类在使用上有特殊的限制,即不能创建抽象类的实例。抽象类与接口之间的区别:(1) 接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法。(2) 一个类可以实现多个接口,而只能继承一个抽象父类。(3) 接口与实现它的类不构成类的继承体系,即接口不是类体系的一部分。因此,不相关的类也可以实现相同的接口。而抽象类是属于一个类的继承体系,并且一般位于类体系的顶层。5下列接口的定义,哪个是正确的?(1)interface Printablevoid print() ;(2)abstract interface Printablevoid print();(3)abs
33、tract interface Printable extends Interface1,Interface2void print() ;(4)interface Printablevoid print();正确的接口定义:(4)第六章 异常处理1 什么是异常?Java 异常处理有哪些方法?在程序运行时打断正常程序流程的任何不正常的情况称为错误或异常。例如,试图打开的文件不存在、网络连接中断、操作符越界和要加载的类找不到等。异常处理是指程序获得异常并处理,然后继续程序的执行。异常处理具体有两种方式:捕获并处理异常;将方法中产生的异常抛出。2 Java 中的异常处理主要处理哪些类型的异常?Jav
34、a 的异常处理机制主要针对 RuntimeException 类型和除 Error 类型以外的其他Exception 类型。RuntimeException 意味着程序设计或实现问题,如:数组使用越界;算术运算异常(如除 0 运算) ;空指针异常即访问没有初始化的空指针等。正确设计与实现的程序不应产生这些异常。对于这类异常,处理的策略是纠正错误。其它的异常 Exception类,通常是由环境因素引起的,例如:文件不存在,无效 URL 等。这类异常经常是由用户的误操作引起的,可以在异常处理中处理,例如提示用户进行正确操作等3 用户程序如何自定义异常?首先定义异常类,用户自定义的异常类定义为 Ex
35、ception 类的子类。这样的异常类可包含普通类的内容。定义了自定义异常类后,程序中的方法就可以在恰当的时候利用throw 语句将该种异常抛出,注意要在方法的声明中声明抛出该类型的异常。之后,Java程序在调用声明抛出自定义异常的方法时,要进行异常处理。具体可以采用上面介绍的两种方式:利用 try-catch-finally 语句捕获并处理;声明抛出该类型的异常。4 系统异常如何抛出?用户自定义异常如何抛出?如果执行 try 块里的语句时出现系统定义异常,JVM 会自动生成一个相应的异常对象,并定位相应的异常处理语句块。用户自定义异常类后,异常是在用户方法的声明中使用throws 子句进行声
36、明的,执行 throw 语句进行异常对象抛出。5 设下列 try-catch 语句块中的第二个语句 s2 将引起一个异常,试回答下列问题:trys1;s2;s3;catch(ExceptionType e1) catch(ExceptionTpye e2) s4;(1)s3 会执行吗?产生异常后,s3 不会执行,系统转型 catch 语句匹配进行错误处理的语句。(2)如果异常未被捕获,s4 会被执行吗?如果异常未被捕获,则运行流程会转型上一层调用程序,s4 不会被执行。(3)如果 catch 子句捕获了异常,s4 会执行吗?如果 catch 子句捕获了异常,s4 会执行。第七章 输入/输出 1
37、.什么是节点流?什么是过滤流或处理流?节点流:以特定源如磁盘文件、内存某区域或线程之间的管道为端点构造的输入/输出流,它是一种最基本的流。过滤流:以其它已经存在的流为端点构造的输入/输出流,称为过滤流或处理流,它要对与其相连的另一个流进行某种转换。2.Java的输入/输出流可以实现哪些类型的输入/输出?内存I/O;管道I/O;文件I/O;对象I/O;数据转换,即按基本数据类型读、写数据;缓存I/O,即对数据进行缓存,以减少I/O的次数;流数据计数;流预读,即通过缓存机制进行预读;字节与字符转换等。3.字节流与字符流之间有什么区别?字节流:流中的数据以 8 位字节为单位进行读写,以 InputS
38、tream 与 OutputStream 为基础类。字符流:流中的数据以 16 位字符为单位进行读写,以 Reader 与 Writer 为基础类。字节流与字符流的主要差别是处理的数据类型不同,其它基本相类似。4.管道流的主要用途是什么?如何创建管道流?管道流可以实现线程间数据的直接传输。线程之间通过管道传输数据与共享缓冲区方法相比,不需要进行线程同步,节省内存并提高了程序的运行效率。管道流的创建是将管道输出流和管道输入流进行挂接。基于管道类的构造方法,可以采取下列两种方式创建管道流:PipedInputStream pin= new PipedInputStream( );PipedOutp
39、utStream pout = new PipedOutputStream(pin);或PipedInputStream pin= new PipedInputStream( );PipedOutputStream pout = new PipedOutputStream();pin.connect(out);或 pout.connect(in);管道流创建后,需要把它的输出流连接到一个线程的输出流,并且把它的输入流连接到另一个线程的输入流,才能利用该管道流实现这两个线程之间的数据交流。6.RandomAccessFile类实现了哪两个接口?具有哪些输入输出功能?RandomAccessFil
40、e类实现了DataInput和DataOutput接口。RandomAccessFile类提供的文件操作主要分为三类:对文件指针的操作、读操作与写操作。RandomAccessFile 实现的是随机读写,即可以在文件的任意位置进行数据的读写。RandomAccessFile 类可可以按数据类型读取数据,读方法主要包括:readBoolean(),readChar(),readInt(),readLong(),readFloat(),readDouble(),readLine(),readUTF()等。这些方法的功能与 DataInputStream 类中的同名方法相同。其中,readLine(
41、)从当前位置开始,到第一个n为止,读取一行文本,它将返回一个 String对象。RandomAccessFile 类具有类型转换功能的写操作方法。RandomAccessFile 类包含的写方法主要包括:WriteBoolean(),WriteChar(),WriteUTF(),WriteInt(),WriteLong(),WriteFloat(),WriteDouble()等。8.什么是对象串行化?将Java程序中的对象保存在外存中,称为对象永久化。对象永久化的关键是将它的状态以一种串行格式表示出来,以便以后读该对象时能够把它重构出来。因此对Java对象的读、写的过程被称为对象串行化(Obj
42、ect Serialization)。Java 定义了ObjectInputStream类和ObjectOutputStream类实现对象的串行化。9.利用ObjectInputStream/ObjectOutputStream可以存取哪种类型的对象?写入对象的方法是什么?读取对象的方法是什么?如果一个对象它所对应的类实现了Serializable接口,则该对象是可以利用ObjectInputStream / ObjectOutputStream 进行存取,即ObjectInputStream /ObjectOutputStream 可以存取Serializable类型的对象。写入对象的方法,
43、是ObjectOutputStream类的writeObject()方法;读取对象的方法是ObjectInputStream类的readObject()方法。第八章 基于 Swing 的图形化用户界面 1.Swing与AWT最大的区别是什么?AWT定义各种组件(Components)类提供平台独立的API,然后利用特定于平台的各种类的实现(称为对等组件,peers)提供具有特定平台风格的L . classMyAdapter extends MouseAdapter public void mouseClicked(MouseEvent e) ./Event handler implementa
44、tion goes here. 8Window组件可以使用哪些类型的监听器?Window组件可以使用WindowListener,对窗口的打开、关闭、激活、去活等操作进行响应;WindowFocusListener,对窗口获得聚焦和失去聚焦的操作进行响应;WindowstateListener,当窗口的状态发生变化,如对最小化和最大化等操作进行响应。9如何设置组件的颜色和字体?Component类是一个抽象类,是AWT中所有组件的父类,也是Swing中JComponent类父类,JComponent类是Swing中除了顶层容器外其他组件的父类。Component类为其子类提供了很多功能,包括提
45、供方法setBackGround(),setForeGround(),setFont()等方法设置组件字体、颜色等。所以可以调用具体组件的上述方法进行颜色和字体的设置。第九章 Applet 程序设计 1.Applet的运行过程是怎样的?Applet的运行包括如下四个步骤:(1)浏览器加载指定URL中的HTML文件;(2)浏览器解析HTML文件;(3)浏览器加载HTML文件中指定的Applet类;(4)浏览器中的Java运行环境运行该Applet。2.Applet生命周期相关的方法有哪些?这些方法是如何被调用的?Applet 生命周期相关方法包括 init(),start(), stop(),d
46、estroy()等 4 种方法。init()是在装载 Applet 时被调用,使 Applet 执行一些基本初始化。start()是在init()方法之后被调用,使 Applet 成为激活状态。stop()是在浏览器离开含有 Applet 的网页时被调用,可用该方法暂时停止线程。Destroy()是在浏览器完全关闭之前被调用,彻底终止 Applet,从内存卸载并释放该 Applet 的所有资源。3.Applet显示或刷新过程中要调用哪些方法?Applet在初次显示,或运行过程中浏览器窗口大小发生变化而引起Applet的显示发生变化时,将调用Applet的paint()方法进行Applet绘制。
47、当Applet代码需要更新显示内容时,则从程序中调用repaint()方法,则AWT线程在接受到该方法的调用后,将调用Applet的update()方法,而update()方法再调用组件的paint()方法实现显示的更新。7.JApplet 中是否可以添加 AWT 组件?为什么?JApplet 中一般都使用 Swing 组件,而不使用 AWT 组件。因为应避免 Swing 组件与 AWT组件混合使用:在 Swing GUI 中应该全部使用轻量级组件,避免使用被称为重量级组件的AWT 组件。第十章 线程 1.试述进程与线程之间的关系。进程是内核级的实体。包含虚存映象、文件指示符,用户ID等。这些
48、结构都在内核空间中,用户程序只有通过系统调用才能访问与改变。线程是用户级的实体,是程序中的单个执行流,线程结构驻留在用户空间中,能够被普通的用户级函数组成的线程库直接访问。寄存器(栈指针,程序计数器)是线程专有的成分。一个进程可以通过运行多个线程来并发地执行多项任务,进程中的所有线程共享该进程的状态。2.Java中线程的模型由几部分构成?在Java中线程的模型就是一个CPU、程序代码和数据的封装体,即一个虚拟的CPU,该CPU执行的代码,以及代码所操作的数据。3.创建线程的两种方式是什么?Java中线程体由Thread类的 run( ) 方法定义,有两种方式进行run( )方法的定义:(1)实
49、现 Runnable 接口。 Runnable 接口只提供了一个public void run( )方法,定义一个类实现Runnable接口,并将该类的实例作为参数传给Thread类的一个构造函数,从而创建一个线程;(2)继承 Thread 类。Thread 类本身实现了Runnable接口,通过继承Thread类,重写其中的run( )方法定义线程体,然后创建该子类的对象创建线程。4.什么是线程调度?Java的线程调度策略是什么?在Java中,为了充分发挥系统的性能,提高多线程并发程序的执行效率,需要定义一定的策略或规则,分配各个线程对CPU的使用权,这就是线程调度。Java的线程调度策略是一种基于优先级的抢先式调度。这种调度策略的含义是:Java基于线程的优先级选择高优先级的线程进行运行。该线程(当前线程)将持续运行,直到它中止运行,或其它高优先级线程成为可运行的。在后一种情况,低优先级线程被高优先级线程抢占运行。5.线程的