《Java程序设计》课后答案_第1页
《Java程序设计》课后答案_第2页
《Java程序设计》课后答案_第3页
《Java程序设计》课后答案_第4页
《Java程序设计》课后答案_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章习题参考答案一、简答题1.Java语言有哪些特点?主要用于开发哪些方面的软件?有7个特点:(1)面向对象,(2)平台无关性,(3)分布式,(4)可靠性和安全性,(5)多线程,(6)健壮性,(7)灵活性。2.Java有哪些版本,各用于什么场合?有3个版本。(1)JavaSE:主要用于桌面应用软件的编程。(2)JavaEE:用于企业级软件开发。(3)JavaME:用于嵌入式系统和电子产品的软件开发。3.什么是Java虚拟机?简述其工作机制。JVM是JavaVirtualMachine(Java虚拟机)的缩写,是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机主要由字节码指令集、寄存器、栈、垃圾回收堆和存储方法域等构成。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等,在JVM上有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完软件后,通过Java编译器将Java源程序编译为JVM的字节代码,任何一台机器只要配备了Java解释器,就可以运行这个程序。4.什么是JDK?它与Java有什么关系?jdk是Java开发工具集,是对java基础环境和相应开发平台标准和工具包的封装。JDK是整个JAVA的核心,包括了Java运行环境JRE(JavaRuntimeEnvirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即JavaAPI包括rt.jar)。二、操作题publicclassMyJavaProgram{publicstaticvoidmain(Stringargs[]){System.out.println("这是我第一次使用Java!");}}第2章习题参考答案一、简答题1.运行Java程序需要哪些软件?至少需要2个软件:(1)JDK。(2)开发平台,如Eclipse、MyEclipse、Jcreate、IntelliJIDEA等。2.JDK与Eclipse有什么关系?JDK是Java软件开发工具包,是整个java开发的核心,它包含了JAVA的运行环境JRE和JVM。Eclipse是一个集成开发平台,其运行依赖于jdk和jre。3.Java程序分为哪几类?有什么区别?主要是2类:(1)Application,即Java应用程序,是可以独立运行的Java程序,由Java解释器控制执行,也是最常见的类型。(2)Applet,即Java小程序,不能独立运行,需嵌入到Web页,由Java兼容浏览器控制执行。4.如何在Eclipse环境下运行Java程序?搭建Java开发环境,安装JDK,配置环境变量,并安装eclipse,搭建完成打开并建Java项目,点击File——New——JavaProject,输入需要创建的项目名,创建完成后点击功能下面src文件夹。点击New——Class,在对话框输入类名,注意名称要与项目名称一致,点击完成编写代码,保存源文件,点击“执行”按钮,即可运行。。二、操作题3.依照本章例题,自己分别编写一个Application和Applet,功能是输出以下信息并在Eclipse环境下运行。IloveJava!应用程序:publicclassILoveJava{publicstaticvoidmain(Stringargs[]){System.out.println("IloveJava!");}}小程序:importjava.awt.*;importjava.applet.*;publicclassHelloWorldAppletextendsApplet{publicvoidpaint(Graphicsg){g.drawString("IloveJava!",20,20);}}第3章习题参考答案一、简答题1.面向对象思想有哪些基本特征?面向对象4大基本特征:抽象、封装、继承、多态。2.面向对象思想包括哪些基本要素?面向对象的三个基本要素:抽象、封装、共享。3.面向对象编程需要哪些步骤?9个步骤:(1)分析确定在问题空间和解空间出现的全部对象及其属性;(2)确定施加于每个对象的操作,即对象固有的处理能力;(3)分析对象间的联系,确定对象彼此间传递的消息;(4)设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;(5)分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;(6)确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;(7)设计每个类关于对象外部特性的描述;(8)设计每个类的内部实现(数据结构和方法);(9)创建所需的对象(类的实例),实现对象间的联系(发送消息)。4.什么是类?类由哪些成分构成?类是对一组具有相同特征的对象的抽象描述,所有这些对象都是这个类的实例。在Java语言中,类是一种数据类型,而对象是该类型的变量,变量名即是某个具体对象的标识名,即对象名。类由属性和方法构成。5.解释以下概念:类,对象,继承,封装,抽象类表示具有相同特征属性的对象的集合,具有相同的特征。它给出了可以从它创建的对象的蓝图或描述。创建一个对象作为一个类的成员被称为实例化。因此,对象是一个类的一个实例。继承是允许新的类通过扩展和完善它的能力而产生新类的机制。现有的类称为父类,而新的类称为子类。子类可以继承父类的属性和方法,子类可以添加自己的属性和方法,并可以修改任何父类方法。继承定义了一个“是一个”关系。封装是在一个类中绑定属性和方法的过程。通过封装,一个类的内部细节可以被隐藏从外部。它允许类的元素只能通过类提供的接口访问外部。抽象用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象;抽象类是不完整的,它只能用作基类,在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。第4章习题参考答案一、简答题1.Java提供了哪些数据类型,全部写出来。整型:byte,short,int,long数值型浮点型:float,double基本数据类型字符型:char数据类型布尔型:boolean类:class复合数据类型字符串:String接口:interface2.如何进行数据类型的转换?有2种方式:自动类型转换:运算时,不同类型的数据先转换成同一类型后再参与运算,转换的原则是位数少的类型转换成位数多的类型,由系统自动处理。强制类型转换:当位数多的类型向位数少的类型进行转换时,需要用户明确说明要转换的类型,需要用户在程序中指明。3.类的修饰符有哪些?有什么区别?类的修饰符包括访问控制修饰符、静态修饰符static、最终说明符final。访问控制修饰符包括4种类型:privat、default、protected、public。用static声明的成员变量被视为类的成员变量,而不能当成实例对象的成员变量,也就是说,静态变量是类固有的,可以被直接引用,而其它成员变量声明后,只有生成对象时才能被引用。4.public的类和abstract的类有什么不一样?public的类是公共类,可以被继续,可以实例化,可以被其他包访问。abstract的类是抽象类,其中一定含有抽象方法,abstractclass的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。5.什么是最终类?如何声明?最终类不能被继承,也没有子类。final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。声明方法:finalclassClassName。二、操作题1.创建一个学生类Student,包括学号no、姓名name、年龄age、性别sex四个属性以及学习study、实践practice两个方法。classDepartment{intNo;StringName;intage;Stringsex;//部门经理是CEO,而CEO是另外一个类publicstaticstudent(){System.out.println(name+"isastudent.”)}publicstaticpractice(){System.out.println(name+"isinlab.”)}}第5章习题参考答案一、简答题1.Java提供了哪些注释语句,功能有什么不同?Java提供了3种形式的注释:(1)//一行的注释内容(2)/*一行或多行的注释内容*/(3)/**文档注释内容*/2.识别下面标识符,哪些是合法的,哪些是非法的。Ply_1,$32,java,myMothod,While,your-list,class,ourFriendGroup_$110,长度,7st合法:Ply_1,$32,java,myMothod,While,ourFriendGroup_$110,长度不合法:your-list,class,7st3.程序有哪3种控制结构?共3种:顺序结构,选择结构,循环结构4.Java中提供了哪些循环控制语句?共3种:while循环,dowhile循环,for循环5.数组有什么特点,数组的声明和初始化方法与简单变量有什么不同?数组是有序数据的集合,数组中的每个元素具有相同的类型,数组名用下标来区分数组中的元素位置。数据声明为某种数据类型,表示数据的每个元素均为这种类型,数据的初始化表示对数据的每一个元素赋值。6.Java编码规范有哪些?包(Package):包名采用完整的英文描述符,都由小写字母组成。类(Class):类名采用完整的英文描述符,所有单词的第一个字母均大写。接口(Interface):接口名采用完整的英文描述符说明接口封装,所有单词的第一个字母大写。组件(Component):使用完整的英文描述来说明组件的用途,末端应接上组件类型。异常(Exception):通常采用字母e表示异常的实例,这是个特例,表示单词Exception的第一个字母,易于记忆。变量、属性、方法:采用完整的英文描述,第一个字母小写,后面所有单词的首字母大写。获取成员函数:被访问字段名的前面加上前缀get。布尔型的获取成员函数:所有的布尔型获取函数必须用单词is做前缀,表示“是不是……”这样一个意义。设置成员函数:被访问字段名的前面加上前缀set表示设置。普通成员函数:采用完整的英文描述说明成员函数功能,第一个单词尽可能采用一个生动的动词,第一个字母小写,类似于变量名。静态常量(staticfinal):全部采用大写字母,单词之间用下划线分隔。循环变量:用于循环语句中控制循环次数,通常用i,j,k或者counter表示。7.什么是方法的覆盖?什么是方法的重载?类层次结构中,如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型的参数列表,则称子类中的方法覆盖了父类中的方法。通过子类引用覆盖方法时,总是引用子类定义的方法,而父类中定义的方法被隐藏。方法的重载是Java实现面向对象的多态性机制的另一种方式。在同一个类中有二个或二个以上的方法可以有相同的名字,只要它们的参数声明不同即可,这种情况称为方法重载。第6章习题参考答案一、简答题1.什么是类的实例化?在面向对象的编程中,通常把用类创建对象的过程称为实例化,即用类创建对象的过程。2.有哪几种方法?类的初始化就是对象的初始化,创建对象的方法:使用New关键字、使用Class类的newInstance方法、使用Constructor类的newInstance方法、使用Clone方法、使用反序列化。最常见的通过new命令初始化。3.如何引用一个对象?类的成员(包括成员属性和成员方法)必须要在产生对象即实例化后才能被引用,引用的方法是:对象名.成员。4.普通数据类型参数和引用数据类型在方法中的传递有什么不同?如果变量是基本数据类型(包括字符串和数组),则按值传递,即方法调用前后变量的值不变;如果变量的类型是类或者接口,即引用数据类型,则按地址传递,变量的值在方法调用后会发生改变。5.什么是构造方法?构造方法有什么特点?构造方法是包含在类中的一种特殊方法,在类实例化时它会被自动调用,其参数在实例化命令中指定。构造方法的特征:具有与类相同的名称,不含返回类型,不能在方法中用return语句返回一个值,在类实例化时,由系统自动调用。6.在一个类中,如果几个构造方法同名,则参数不能相同。参数指的是什么?指参数的类型、个数、顺序不能都相同。第7章习题参考答案一、简答题1.什么是包?包中包括一些什么内容?包也称类库,可以理解为文件夹,用于解决类的命名冲突问题。包由下级包和类组成。2.如果有一个包pag1,它的子包是pag2,如果需要将这两个包都引入程序,至少需要使用几条import语句?2条,分别是:importpag1;importpag2;3.接口与类有什么不同?与抽象方法存在什么样的关系?接口是一种特殊的类,也是一种特殊的抽象类,接口中所有方法全部是抽象方法。接口不能直接实例化,必须要实现所有抽象方法后才能实例化。4.Java提供了哪些系统类库?各起什么作用?Java提供了很多类库,即包,主要包括:java.lang包,java.io包,java.applet包,java.awt包,包,java.math包,java.util包,java.SQL包,javax.swing包等。5.Java的基类是什么?它提供了哪些主要方法?java.lang包中的类Object是Java中所有类的基础类,不需要用import语句引入,每个程序运行时,系统都会自动引入java.lang包。提供了基本数据类型及输入输出等方法6.字符串类有哪两种?各有什么特点?String类和StringBuffer类。String类用于比较两个字符串、查找串中的字符及子串、字符串与其它类型的转换,String类对象的内容初始化后不能改变。StringBuffer类用于内容可以改变的字符串,可将其它类型的数据增加、插入到字符串中,也可翻转字符串的的内容,字符串是一种特殊形式的数组。7.JDK帮助系统有哪几种?分别说明它们的使用特点。JDK帮助文件提供了三种使用方法:第一种是在线查询,通过Oracle官网的APISpecification(API规范)页面查询,只支持英文。第二种是下载网页格式的帮助文档,其启动文件是index.html。第三种是下载chm格式的帮助文档。8.设置cha="JavaApplication",下面结果是什么?cha.length(),cha.concat("Applet"),cha.substring(3,8)cha.replace('a','A')15,JavaApplicationApplet,aAppli,JAVAApplicAtion第8章习题参考答案一、简答题1.实现类的继承是通过哪个关键字实现的?使用extends和implements这两个关键字来实现继承,而且所有的类都是继承于java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在java.lang包中,所以不需要import祖先类。在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类。2.Java能实现多继承关系吗?如何解决这个问题?在Java中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以extends只能继承一个类。使用implements关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口,接口跟接口之间采用逗号分隔。3.如果父类和子类同时提供了同名方法,在类实例化后,调用的是哪个类的方法?采用什么办法避免混淆?子类。通过super与this关键字区别父类和子类。super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。this关键字:指向自己的引用,表示当前正在调用此方法的对象引用。4.什么是抽象类?抽象类和普通类有什么不同?抽象类是指类中含有抽象方法的类,抽象类和普通类区别是:1、和普通类比较起来,抽象类它不可以被实例化,这个区别还是非常明显的。2、抽象类能够有构造函数,被继承的时候,子类就一定要继承父类的一个构造方法,但是,抽象方法不可以被声明成静态。3、在抽象类当中,可以允许普通方法有主体,抽象方法只需要申明,不需要实现。4、含有抽象方法的类,必须要申明为抽象类。5、抽象的子类必须要实现抽象类当中的所有抽象方法,否则的话,这个子类也是抽象类。6、抽象类它一定要有abstract关键词修饰。第9章习题参考答案一、简答题1.什么是接口?接口与类有什么不同?接口是由常量和抽象方法组成的特殊类。一个类只能由一个父类,但是它可以同时实现若干个接口。这种情况下如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多重继承。与类定义相仿,声明接口时也需要给出访问控制符,不同的是接口的访问控制符只有public一个。用public修饰的接口是公共接口,可以被所有的类和接口使用,而没有public修饰符的接口则只能被同一个包中的其他类和接口利用。接口也具有继承性。定义一个接口是可以通过extends关键字声明该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的继承不同的是一个接口可以有一个以上的父接口,它们之间用逗号分隔,形成父接口列表。新接口将继承所有父接口中的属性和方法。2.接口的修饰符包括哪些?接口的修饰符只有:public。接口中的方法会加上publicabstract或者publicstaticfinal。3.接口与抽象类有什么不同?1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。2、抽象类要被子类继承,接口要被类实现。3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。6、抽象方法只能申明,不能实现,接口是设计的结果,抽象类是重构的结果。7、抽象类里可以没有抽象方法。如果一个类里有抽象方法,那么这个类只能是抽象类。4.如何实现多个接口?类虽然只能继承一个父类(抽象类或其他类),但可以通过implements实现多个接口。如:classClassNameextendsSuperClassNameimplementsInterfaceName1,InterfaceName2第10章习题参考答案一、简答题1.什么是多态?类的多态是怎么实现的?多态(Polymorphism)按字面的意思就是“多种状态”,在面向对象语言中,接口的多种不同的实现方式即为多态。多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。多态通过重载和覆盖实现,重载发生在一个类中,覆盖发生在子类,子类重写父类相同名称的方法。2.创建多态需要哪些条件?

在代码中实现Java的多态必须遵循的必要条件:存在子类继承父类关系(包括接口的实现)、子类覆盖父类中的方法,在实现多态,需有子类对父类方法的覆盖(重写)。3.类是怎么向接口转型实现多态的?定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。第11章习题参考答案一、简答题1.什么是异常?异常产生的原因有哪些?程序员编写程序时,难免会出现一些问题,导致运行时会出现一些非正常的现象,其中非致命性错误称为异常。产生的原因有以下3种情况:(1)JVM检测到非正常的执行状态,这些状态可能由以下情况引起的:表达式违反了Java语言的语义,装入或链接程序时出错,超出了资源限制,如内存不足,这种异常是程序员无法预知的。(2)程序代码中的throws语句被执行。(3)因为代码段不同步而产生,可能的原因是:Thread(线程)的stop方法被调用,JVM内部发生错误。2.为什么Java的异常处理技术优于传统程序的异常处理技术?在没有异常处理机制的程序设计语言中进行异常处理,通常是在程序设计中使用if-else或switch-case语句所能设想的到的错误情况,以捕捉程序中可能发生的错误。在这种处理方式的程序中,对异常的监视、报告和处理的代码与程序中完成正常功能的代码交织在一起,即在完成正常功能的程序的许多地方插入了与处理异常有关的程序块。这种处理方式虽然在异常发生点可以看到程序如何处理异常,但它干扰了人们对程序正常功能的理解,使程序的可读性和可维护性下降,并且由于人的思维限制,常常会遗漏一些意想不到的异常。Java的异常处理机制是在程序中监视可能发生异常的程序块,将一个程序中的所有异常收集起来放到程序的某一段中处理,而不必在被监视的程序块中多处插入处理异常的代码,使完成功能的程序代码与进行异常处理的程序代码分开,增强了程序的可读性和可靠性,减少了编程人员的工作量,增加了程序的灵活性。此外,这种机制可以及时有效地处理程序运行中的异常,可以预防因错误的程序代码或系统错误所造成的不可预期的结果发生,并且当这些不可预期的错误发生时,异常处理机制会尝试恢复异常发生前的状态或对这些错误结果做一些善后处理。3.在Java代码中可用来处理异常的方式有哪些?(1)在可能产生异常的方法中,采用Java语言提供的try-catch-finally语句块处理异常。(2)如果一个方法可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应声明抛弃该种异常,表明该方法将不对此类异常进行处理,而由该方法的调用者负责处理。此时需在方法声明中包含throws子句。4.如果发生了一个异常,但没有找到适当的异常处理程序,则会发生什么情况?如果发生了一个异常,但没有找到适当的异常处理程序,则Java系统会采用Java异常处理机制预设处理方法来处理异常,即一旦程序发生异常,程序就会被终止并显示相应的错误信息给用户。5.说明throw与throws有什么不同?throw与throws的不同之处在于:throw语句是一个独立的语句,用来明确地抛出一个异常,其作用是改变程序的执行流程,使程序跳到相应的异常处理语句中执行。而throws语句总是和方法定义结合起来用,在有些情况下,不需要一个方法处理本身可能产生的异常,而是希望把异常向上移交给调用这个方法的方法来处理,就需要通过throws语句来实现。6.在设计catch块处理不同的异常时,一般应注意哪些问题?应注意如下的问题:(1)catch块中的语句应根据异常的不同执行不同的操作,比较通用的操作是打印异常的相关信息,包括异常名称、产生异常的方法名等。(2)由于异常对象与catch块的匹配是按catch块的先后排列顺序进行的,所以在处理多异常进应注意认真设计各catch块的排列顺序。一般地,处理较具体和较常见的异常的catch块应放在前面,而可以与多种异常相匹配的catch块应放在较后的位置。第12章习题参考答案一、简答题1.什么是AWT?什么是Swing?两者有什么区别?答:AWT是AbstractWindowToolkit几个单词的缩写,其中文含义是抽象窗口工具包,AWT是Java的第一个GUI框架,AWT是JDK1.0与JDK1.1版本下提供的GUI开发工具包,包含60多个组件类、接口及其方法,可用于创建基于窗口或Applet的GUI应用。Swing是一个用于开发Java应用程序用户界面的开发工具包,swing以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。两者的区别:AWT是java图形用户界面GUI开发的基础框架,Swing是以AWT作为基础的第二代GUI开发框架。Swing相对于AWT具有以下优势:■Swing组件完全由纯Java语言实现,没有本地代码,不依赖于具体平台的支持,功能更强大,具有更好的平台无关性。■Swing程序中可以指定GUI组件的LookandFeel,真正做到与平台无关。■Swing组件提供了许多AWT组件无法实现的功能,如Swing组件可以显示图像与图标,支持边框、标题及tooltips等。■Swing除具有与AWT原有组件类似的组件外,还增加了一个丰富的高层组件集合,集合中集成了诸如表格(JTable)、树(JTree)等组件。2.布局管理器的作用是什么?Java提供了哪几种布局管理?分别有什么特点?答:布局管理器是执行布局管理的特殊对象,它确定容器中的组件是如何组织和管理的,即通过布局管理器来实现控制组件在容器控件中的排列顺序和位置。Java提供了多种布局管理器:(1)FlowLayout(流布局管理器)流布局管理器以控件加入到容器的次序,按行一个接一个地放置控件,当该布局管理器的控件到达此JFrame框架的右边界时,它自动开始在下一行放置控件。(2)GridLayout(网格布局管理器)网格布局是流布局管理器的扩展,网格布局把面板划分为矩形格子,然后网格布局把创建的组件放入每一个格子,从左到右,从上自下地放置。网格布局与流布局不同的是它按指定的列数自动换行。网格布局管理器和流布局管理器的另一个区别是其组件占満容器所分配的整个区域,当窗口大小改变时,组件大小也随着改变。在默认状态下,GridLayout管理器使控件对准每一矩形的中心。(3)BorderLayout(边界布局管理器)BorderLayout将容器分为东、南、西、北、中5个区域,按照上北下南左西右东的格局分布,各用一个方位单词表示,注意第一个字母是大写:东:East、南:South、西:West、北:North、中:Center。放置组件时,必须从这5种方向中选择其一以靠近窗口的边界,BorderLayout最多放置5个组件,当少于5个时,没有放置组件的区域被相邻区域占用。(4)GridBagLayout网格袋布局管理器GridBagLayout布局管理器是java.awt包中提供的最灵活、最复杂的布局管理器。它类似于网格布局(GridLayout),GridBagLayout布局管理器把组件组织成长方形网格,使用这种布局,可灵活地把组件放在长方形网格的任何行和列中,它也允许特定的组件跨多行或多列。(5)CardLayout(卡片布局管理器)CardLayout卡片布局管理器是采用卡片式的管理方法,可存储几个不同的布局,每个布局就像是一个卡片组中的一张卡片,在一个给定的时间总会且只有一张卡片在顶层,其它卡片看不到。当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。3.容器有哪些作用?Swing有哪些容器类控件?分别有什么特点?答:容器自身首先也是一种组件,具有其他组件的共同特性;其次容器是一种特殊的组件,其特殊性在于容器的功能是用来容纳一般的组件对象与容器组件对象的。Swing中定义了以下几种窗口控件:(1)JFrame窗体JFrame窗体是一个容器,它是Swing程序中各个组件的载体,可以将JFrame看作是承载着血Swing组件的容器。在开发应用程序时,可以通过继承java.swing.JFrame类创建一个窗体。在这个窗体中添加组件,同时为组件设置事件。(2)JDialog对话框JDialog窗体的功能是从另外一个窗体中弹出另外一个窗体,JDialog窗体实质上就是另一种类型的窗体,它与JFrame窗体类似,在使用时也需要调用getCOntentPane()方法将窗体转换成容器,然后在容器中设置窗体的特性。(3)JPanel面板JPanel是Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing包中,是一种轻量级容器,可以加入到JFrame窗体中。JPanel默认的布局管理器是FlowLayout,其自身可以嵌套组合。4.设计一个菜单系统的步骤有哪些?答:设计一个菜单一般要经过以下几个步骤:(1)使用JMenuBar类创建菜单栏。(2)使用JMenu类创建主菜单项。(3)使用JMenuItem类创建菜单项和子菜单项。(4)通过使用JCheckBoxMenuItem等类设置菜单项的一些属性。(5)实现菜单项的事件处理。第13章习题参考答案一、简答题1.什么是事件?事件处理包括哪些因素?答:Java对事件的处理采用授权的事件模型,也成为委托事件模型。在授权事件模型中,事件是一个描述事件源状态改变的对象。通过鼠标、键盘与GUI直接或间接交互都会产生事件,按回车键、单击按钮、在一个下拉列表中选择一个选项等操作。程序有时需对发生的事件作出反应来实现特定的任务。事件处理主要包括:事件、事件源和监听器(事件处理者)。事件是由事件源产生,事件源可以是GUI组件、JavaBen或由生成事件能力的对象。事件发生后,组件本身并不处理,需要交给监听器(另外一个类)来处理。实际上监听器也可称为事件处理者。监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为"监听器接口"。监听器负责处理事件源发生的事件,监听器是一个对象,为了处理事件源发生的事件,监听器会自动调用一个方法来处理事件.对每个明确的事件的产生,都相应地定义一个明确的Java方法。2.请具体说明Java的事件处理机制中涉及到哪些方面?答:Java对事件的处理采用授权的事件模型,即委托代理模型。委托代理模型(Delegationmodel)的原理是:当事件产生时,该事件被送到产生该事件的组件去处理,而要能够处理这个事件,该组件必须注册(register)有与该事件有关的一个或多个被称为listeners监听器的类,这些类包含了相应的方法能接受事件并对事件进行处理,包括如下处理过程:(1)确定事件源图形界面的每个可能产生事件的组件称为事件源,不同事件源上发生的事件的种类不同。(2)注册事件源如果希望事件源上发生的事件被程序处理,就要把事件源注册给能够处理该事件源上那种类型的事件监听器。监听器是属于一个类的实例,这个类实现了一个特殊的接口,名为“监听器接口”。(3)委托处理事件当事件源上发生监听者可以处理的事件时,事件源把这个事件作为实际参数传递给监听者中负责处理这类事件的方法,该方法根据事件对象中封装的信息来确定如何响应这个事件。3.事件处理中,事件接口有什么作用?事件适配器类有什么作用?请简述通过实现接口和继承适配器来实施事件处理有什么异同?答:事件处理机制中,事件接口是一个抽象类,其中定义了可以监听事件的抽象方法。将需要监听的对象封装在自定义的事件状态对象类(EventObject)中,这个类必须继承java.util.EventObject。事件状态对象作为单参传递给应响应该事件的自定义监听器方法中。该自定义监听器需实现自定义监听接口,实现此接口中以事件状态对象为参数的方法。发出某种特定事件的事件源:必须在类中实例化自定义的监听器对象,当监听到eventobject时,调用相应方法进行处理。事件适配器(Adapter)可以认为是一个简化版的监听器,而监听器是对一类事件可能产生的所有动作进行监听。每个含有多个方法的AWT监听器接口都配有一个适配器(XxxAdapter)类,这个类实现了接口中的所有方法,但每个方法没有做任何事情。可以通过继承适配器类来指定对某些事件的响应动作,而不必实现接口中的每个方法。要说明一点,因为ActionListener接口中只有一个抽象方法,因此没必要提供适配器类。使用适配器类来实现事件监听,其最大优势在于当事件监听只用到其中一个方法时,不需要重写抽象接口中的所有方法,消除了代码冗余,简化程序开发代码量。第14章习题参考答案一、简答题1.什么叫流?流分为哪几种?答:流即数据流(datastream),是一组有序,有起点和终点的字节的数据序列。数据流按照功能一般分为输入流(InputStream)和输出流(OutputStream);按照处理数据的单位可以分为字节流和字符流;按照对流中数据的处理方式,流又可以分为文本流和二进制流。Java的所有I/O流都是四个抽象类的子类,这四个抽象类是什么?答:4个抽象类分别是:InputStream、OutputStream、Reader、Writer。3.写出下面这些输入输出流类的输入输出操作的特点。(1)InputStream和OutputStream(2)FileInputStream和FileOutputStream答:InputStream和OutputStream为各种输入输出字节流的基类,所有字节流都继承这两个基类。它们不能实例化,但是规定了所有流都必须具备的读写方法。处理单元为一个字节,操作字节和字节数组,常用于音频、图片等数据传输。FileInputStream和FileOutputStream是操作文件的字节流,从文件系统中的某个文件中获得输入或输出字节。4.File类的作用是什么?答:File类是I/O包中唯一能够代表磁盘文件本身的对象,使用File类,我们可以方便地建立与某磁盘文件的连接。一个对应着某磁盘文件或目录的File对象一经创建,我们就可以通过调用它的方法来获得该文件或目录的属性,File类中还定义了一些对文件或目录进行管理、操作的方法,利用这些方法可以完成对文件和目录的建立、删除、查询、重命名等操作。5.Java语言是否可以读入和写出文本格式的文件?如果可以,如何读写?答:可以。使用FileReader类和FileWriter类进行。6.流文件读入和写出的操作过程有哪些?答:流文件读入和写出的操作过程如下:(1)利用文件名字符串或File对象创建输入输出流对象以创建FileInputStream为例,它有两个常用的构造函数:FileInputStream(StringFileName):利用文件名(包括路径名)字符串创建从该文件读入数据的输入流FileInputStream(Filef):利用巳存在的File对象创建从该对象对应的磁盘文件中读入数据的输入流注意:在创建文件输入或输出流时可能因给出的文件名不对,或路径不对,或文件的属性不对不能进行读写而造成错误,此时系统会抛出异常FileNotFoundException,所以创建文件输入输出流并调用构造函数的语句应该被包括在try块中,并有相应的catch块来处理它们可能产生的异常。(2)从文件输入输出流中读写数据从文件输入输出流中读写数据有两种方式:一是直接利用FileInputStream和FileOutputStream自身的读写功能;另一种是以FileInputStream和FileOutputStream为原始数据源,再套接上其他功能较强大的输入输出流完成文件的读写操作。二、操作题1.在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中。程序参考代码如下:importjava.io.File;importjava.io.FileOutputStream;publicclassTest5{ publicstaticvoidmain(String[]args){ //向文件D:/Hello.txt,写入内容 Filefile=newFile("D:/Hello.txt"); try{ //创建输出流 FileOutputStreamfos=newFileOutputStream(file); //把String类型的字符串转化为byte数组的数据保存在输出流中 fos.write("HelloJavaWorld你好世界".getBytes()); fos.flush();//刷新输出流 fos.close();//关闭输出流 }catch(Exceptione){ e.printStackTrace(); } }}2.编写程序,实现当用户输入的文件名不存在时,可以重新输入,直到输入一个正确的文件名后,打开这个文件并将文件的内容输出到屏幕上的功能。程序参考代码如下:importjava.io.*;publicclassXT009202{publicstaticvoidmain(Stringargs[]){Stringstr;FilesourceFile;BufferedReadersource;while(true){try{InputStreamReaderdin=newInputStreamReader(System.in);BufferedReaderin=newBufferedReader(din);System.out.print("请输入文件路径及文件名:");sourceFile=newFile(in.readLine());source=newBufferedReader(newFileReader(sourceFile));while((str=source.readLine())!=null){System.out.println(str);}din.close();in.close();break;}catch(IOExceptione){System.out.println("I/O错误!重新输入文径路径及文件名");}}//endwhile}}3.编写程序,将程序文件的源代码复制到程序文件所在目录下的“backup.txt”文件中。程序参考代码如下:importjava.io.*;publicclassXT009203{publicstaticvoidmain(Stringargs[]){try{FileInputStreamfis=newFileInputStream("XT009203.java");FileOutputStreamfos=newFileOutputStream("temp.txt");intread=fis.read();while(read!=-1){fos.write(read);read=fis.read();}fis.close();fos.close();}catch(IOExceptione){System.out.println(e);}}}第15章习题参考答案一、简答题1.什么叫线程?什么叫多线程?答:线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。2.简述进程和线程的联系和区别。答:(1)资源分配&处理器调度:进程是资源分配的基本单位,线程是处理器调度的基本单位。(2)地址空间:进程拥有独立的地址空间;线程没有独立的地址空间,同一进程内多个线程共享其资源。(3)划分尺度:线程更小,所以多线程程序并发性更高。(4)执行:一个程序至少有一个进程,一个进程至少有一个线程。3.简述线程的生命周期。答:线程在它完整的生命周期中,包括新建、就绪、运行、阻塞和死亡5种状态。4.创建线程的两种方式分别是什么?各有什么优缺点。答:创建线程的两种方式分别是继承Thread类创建和实现Runnable接口创建。(1)继承Thread类创建优点:代码简单。缺点:该类无法集成别的类。(2)实现Runnable接口创建优点:继承其他类,同一实现该接口的实例可以共享资源。缺点:代码复杂。5.Java线程的优先级设置遵循什么原则?答:Java线程的优先级设置遵从下述原则:(1)线程创建时,子线程继承父线程的优先级(2)线程创建后,可在程序中通过调用setPriority()方法改变线程的优先级(3)线程的优先级是1~10之间的正整数,数字越大优先级越高,默认的优先级是居中,即为5。6.举例说明什么叫线程的同步?Java中如何实现线程的同步?答:有一个银行帐号,存款余额是8000元,用户A持有信用卡,用户B持有存折,如果有同一时间都要求取款5000元。我们看会出现什么情况。取款的过程分两步:(1)取款;(2)更新帐户余额。用户A取款5000后,还没有来得及更新帐户余额,用户B抢得线程,又取款5000元(这时帐户余额还是8000元),然后更新帐户余额,剩下3000元,用户B取款完成后,用户A线程再运行,继续更新帐户余额,余额变为-2000。产生负数余额的原因是:取款过程的两步被分开执行。针对这个问题,可以将取款过程的两个动作锁定,即放入同步代码块中,直到两步都执行完才能允许其它线程执行,这就是线程的同步。Java中实现线程的同步方法:常是利用synchronized编写同步方法和代码块。二、操作题1.编写一个程序,通过继承Thread创建线程并以此生成两个线程,每个线程输出从1到5的数。程序参考代码如下:publicclassMyThreadextendsThread{ publicvoidrun(){ try{ for(inti=1;i<6;i++){ System.out.println(i); sleep(2000);} }catch(InterruptedExceptione){}} publicstaticvoidmain(Stringargs[]){ System.out.println("当前的线程数:"+Thread.activeCount()); MyThreadthread1=newMyThread(); thread1.start(); System.out.println("当前的线程数:"+Thread.activeCount()); MyThreadthread2=newMyThread(); thread2.start(); System.out.println("当前的线程数:"+Thread.activeCount()); }}2.设计7个线程对象,模拟体彩七星彩的开奖程序。提示:七星彩的整个开奖过程需要产生7位开奖号码,每个开奖号码的范围为0-9之间。程序参考代码略。3.模拟三个老师同时分发80份学习笔记,每个老师相当于一个线程。程序参考代码如下:classTeacherimplementsRunnable{privateintnotes=80;publicvoidrun(){while(true){dispatchNotes();//调用售票方法if(notes<=0){break;}}}privatesynchronizedvoiddispatchNotes(){if(notes>0){try{Thread.sleep(10);//经过的线程休眠10毫秒}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"---发出的笔记"+notes--);}}}publicclassTest06{ publicstaticvoidmain(String[]args){ Teachert=newTeacher(); newThread(t,"语文老师").start(); newThread(t,"数学老师").start(); newThread(t,"英语老师").start(); }}4.编写一个创建三个线程对象的程序。每个线程应该输出一个消息,并且消息后紧跟字符串“消息结束”。要求:在线程输出消息后,暂停一秒钟后才输出“消息结束”。程序参考代码略。第16章习题参考答案一、简答题1.简述TCP与UDP的区别?答:(1)TCP基

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论