admin 管理员组

文章数量: 887053


2023年12月21日发(作者:typescript用的人多吗)

Java程序设计课后习题参考答案1-11章

(上交大)

第1章

1.利用Java来创建和开发应用程序都需要遵循以下步骤。

1)编写Java源程序

使用文本编辑器来编写Java源程序并保存,在保存时一定要注意文件的后缀必须是.java。

2)编译Java源程序

使用Java编译器()将保存好的Java源文件编译成Java类文件,得到的文件扩展名为.class。Java类文件是由字节码构成的,所以也称为字节码文件。

3)运行Java程序

Java程序可以分为Java应用程序(Java application)和Java小应用程序(Java Applet)两类。其中,Java应用程序必须通过Java解释器()来解释执行得到的Java类文件;Java小应用程序则必须使用支持它的浏览器来运行。

2.一个Java源程序是由若干个类组成的。

(1)class是Java中用来定义类的关键字;public也是关键字,用来说明HelloJava是一个公有的类。第一个大括号和最后一个大括号之间的内容叫做类体。

(2)public static void main(String args[])是类体中的一个方法,

一个Java应用程序必须且只能有一个类含有main( )方法,这个类称为Java应用程序的主类。

(3)在Java应用程序中,main( )方法必须被说明为public static

void。public关键字说明main( )方法是公有方法,可以被任何对象访问;static关键字说明main( )方法是静态的;void则说明main( )方法不返回任何值。

(4)String args[]声明一个字符串类型的数组args,它是main( )方法的参数。main( )方法就是程序开始执行的入口。

(5)“//”表示程序中的注释。

3.Java Applet也叫Java小应用程序。与Java应用程序不同,Java Applet可以直接嵌入网页中,并能够产生特殊的效果,即Java

Applet是专门为网络使用而设计的。与Java应用程序相比,Java Applet借助于浏览器窗口来展示其功能,并可以响应用户界面事件。其特点包括:

(1)Java Applet是嵌入在浏览器中运行的。

(2)运行Java Applet的解释器不是独立的软件工具,而是浏览器软件的一部分。

(3)Java Applet不需要有main( )方法,但是其主类必须是Java类库中已经定义好的类的子类。

(4)Java Applet可以直接利用浏览器或appletviewer提供的图形用户界面。

(5)Java Applet更多体现的是状态与状态之间的切换,而不是固定的顺序执行过程,这使得它更适合于在图形界面下进行面向对象的程序设计与开发。

4.略

5.略

第2章

1.标识符是Java程序的主要组成部分,每条语句中都会包含标识符。标识符是一个唯一标识变量、方法和类的名字。在Java中,标识符是以字母、下划线(_)或美元符($)开头,由字母、数字、下划线或美元符组成的字符串。除了这些符号,标识符中不能包含其他符号。标识符区分大小写,但长度没有限制。

2.运算是对数据进行的操作,表示各种不同运算的符号称为运算符。参与运算的数据称为操作数。由操作数和运算符按一定的语法形式组成的有意义的符号序列,就是表达式。

Java中的表达式包括:赋值表达式、算术表达式、自增/自减表达式、关系表达式、逻辑表达式。

3.在执行while语句时,先计算<布尔表达式>的值,如果表达式的值为true,while语句就执行循环体,然后继续计算表达式的值,直到其为false。

与while语句不同的是,在每次循环时,do-while语句先执行循环体,然后再计算布尔表达式的值,如果布尔表达式的值为true,就再次执行循环体,直到布尔表达式的值为false。do-while语句至少要执行一次循环体。

for语句的执行过程是:先计算两个表达式的值,如果第2个表达式的值为true,则执行一次循环体,然后计算第3个表达式的值,

再进行下一次的循环;如果第2个表达式的值为false,则结束循环,程序将执行for语句后的下一条语句。

4.略

5.略

第3章

1.类是一种复杂的数据类型,它是将数据和对数据的操作封装在一起而形成的集合体,是普通数据类型的扩展。类不仅包含数据,还包含对数据进行操作的方法,正是这些方法反映了数据的行为。

对象是类的实例,是某个类的变量。当一个程序运行时,系统为对象分配内存单元,而不是为类分配内存单元。类和对象是密切相关的,类脱离不了对象,对象必须依赖类。

两者的关系可以简单地描述为抽象和具体的关系。

2.Java中,类成员的访问权限可以分为公共访问、默认访问、私有访问、保护访问和私有保护访问等几种,其中,除了默认访问没有控制符进行修饰,其他几种访问权限分别使用public、private、protected和private protected这样的访问控制修饰符。

3.如果把类设计成一个黑匣子,则使用者只能看见类中定义的

公用方法却看不到方法的实现细节,也不能直接操作类中的数据,这样就可以有效地防止外部对类的干扰。如果改变了类中数据的定义,只要方法名不改,就不会对使用该类的程序产生任何影响,这就是封装的含义。也就是说,类的封装可以减少程序对类中数据的依赖性。

通过封装,可以达到以下目的。

(1)隐藏类的实现细节。

(2)要求用户只能通过接口访问数据。

(3)提高代码的可维护性。

4.继承是一种由已有的类创建新类的机制,利用继承,可以创建一个具有特殊属性的新类。新类继承了已有类的状态和行为,并根据需要来增加自己的状态和行为。

对象的多态性主要分为两种类型,即向上转型和向下转型。向上转型是指用子类对象实例化父类,对象的向上转型是自动完成的;向下转型是指用父类对象实例化子类,向下转型时,必须明确指明要转型的子类类型。

5.方法的重载是指在一个类中,方法的名称相同,但是方法的参数个数或参数类型不同,这称为方法的重载。在调用具有重载关系的方法时,通过传递参数的个数以及传递参数的类型来区分调用了哪个方法。

如果子类的方法与父类中的方法同名,则子类不能继承父类中的

方法,此时称子类方法覆盖了父类中的方法。

6.接口是Java中的重要概念,可以将接口理解为一种特殊的类,接口由全局常量和公共的抽象方法组成。接口定义了若干抽象方法和常量,形成了一个属性集合,该属性集合往往对应某种功能,其主要作用是实现类的多重继承。

接口的声明只是给出了抽象方法,在定义了接口后,类就可以实现这个接口。类必须实现定义在接口中的方法,每个类能够自由决定方法具体实现的细节。可以通过关键字implements,使用特定格式的语句来实现接口。

7.Java中常用的包有输入输出包和网络包等,在程序中使用Java已经定义好的类时需要使用import导入命令。

第4章

1.定义数组时,需要声明数组的名字、维数和数组所包含的元素的数据类型。当声明一个数组变量时,系统并没有创建数组本身,而创建数组后,系统会给每个数组元素一个默认的值,如果在创建数组的同时为数组赋值,就是对数组的初始化。使用数组时,直接通过数组变量名就可以。

2.略

3.String类的equals()方法用于确定两个字符串是否相等,但这种比较方法是大小写敏感的。String类还提供了一种大小写不敏感的方法来比较两个字符串。

4.Java中的String对象是不能更改的,即String对象是永久性字符串。但实际中我们也需要改变String对象,所以需要借助Java定义字符串的标准库StringBuffer来实现。StringBuffer对象是可修改的,Java就是在内部使用StringBuffer类的对象完成对String对象的操作。

5.略

6.略

第5章

1.异常是标准类Throwable的一些子类的对象,每一种异常对应着一种特定的运行错误。错误类(Error)和异常类(Exception)是派生自该类的两个直接子类。Java就是通过错误类和异常类来处理应用程序中产生的错误和异常。

如果在Java应用程序的运行过程中发生了一个可以识别的运行错误,系统都会产生一个该异常类的对象,也就是产生一个异常。一旦产生了异常,系统就有相应的处理机制来处理它,确保应用程序能够改变执行的方向,不产生严重的错误,从而保证整个应用程序的安全性,

这就是Java的异常处理机制。Java的异常处理机制是通过抛出异常和捕获异常进行的。

2.一般地,系统捕获到程序抛出的异常对象后,会输出相应的信息,并终止程序的运行。这导致后面的程序无法运行。为了避免异常对其他程序的影响,需要使程序能够接收和处理异常对象。在Java的异常处理机制中,提供了try-catch-finally语句来捕获和处理一个或多个异常。

3.Throwable类的一些子类的对象都对应着一种异常,每一种异常对应着一种特定的运行错误。Java就是通过Throwable类来处理应用程序中产生的错误和异常

4.所谓自定义异常,就是定义一个继承自Exception类的子类。需要说明的是,一般情况下自定义异常类都是直接继承自Exception类,而不是继承自某个运行时的异常类。

编写程序:略

5.对于Java源程序中自定义的异常,需要借助throws语句来定义什么情况下产生了异常,并且抛出这个异常类的新对象。对于程序抛出的异常,可以只编写一个异常处理程序就能捕获所有类型的异常。

6.略

第6章

1.Java的文件输入和输出需要用到流(stream)。流是计算机的输入与输出之间的数据序列,是输入设备(数据来源)或输出设备(数据目标)的一种抽象表示。可以把数据写入一个流,也可以从流中读出数据。

2.字节流主要操作byte类型的数据,主要的操作类包括InputStream和OutputStream。它们定义了数据流读取和写入的基本方法。而在程序中一个字符通常都是按照两个字节来处理的,所以Java提供了Reader和Writer两个抽象类来专门操作字符流。

3.(1)int read( )。该方法从相应的流中读取一个字节,并返回int型的值。(2)int read(byte[] buffer)。该方法从流中读取足够的字节到字节数组buffer中,直到流的结尾。该方法返回int型的值,表示读取的字节个数。(3)int read(byte[] buffer, int offset, int length)。该方法从流中读取一定的字节到字节数组buffer从offset开始的数组缓冲区中,读取的字节数为length。该方法返回int型的值,表示读取的字节个数。

4.流式输入和输出方法在一个操作中一般只允许把少量的数据

写入或读出,如一些字节、字符或字符串,与物理设备之间传送数据的效率很低,所以,通常使用一个缓冲区来配合一个流的操作,这样的流称为缓冲流(buffered stream)。缓冲流使内存与外部设备之间传送的实际数据以足够大的数据块形式传送,从而使输入和输出操作具有更高的效率。

当向一个缓冲流写入数据时,数据会被发送到这个缓冲区,而不是被发送到具体的外部设备。缓冲区中的数据量由系统自动记录,只有当缓冲区满时,这些数据才会被发送到具体的外部设备。

缓冲输入流的工作方式与缓冲输出流相似,任何一个在缓冲输入流上进行的读操作都从该缓冲区读取数据。当缓冲区空时,只要还有数据输入,系统就会从相关设备自动读取缓冲区容量大小的数据到缓冲区中。

第7章

1.Swing是一个用于开发Java应用程序界面的工具包,它以抽象窗口工具包(abstract window toolkit,AWT)为基础,使跨平台应用程序可以使用任何可插拔的外观风格。只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。也可以这样说,Swing是Java平台的UI(user interface),充当了处理用户与计算机之间全部交互的角色。

相对于AWT来说,Swing的主要优势就在于MVC体系结构的普遍使用。因为为了简化组件的设计工作,在Swing组件中,视图和控件两部分被合为一体。每个组件都有一个相关的分离模型和它使用的界

面(包括视图和控件)。

2.Swing组件从功能上可以按下面的类型来划分。

(1)顶层容器:如JFrame、JApplet、JDialog、JWindow。

(2)中间容器:如JPanel、JScrollPane、JSplitPane、JToolBar。

(3)特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame、JLayeredPane、JRootPane。

(4)基本控件:实现人机交互的组件,如JButton、JComboBox、JList、JMenu、JSlider、JTextField。

(5)不可编辑信息的显示:向用户显示不可编辑信息的组件,如JLabel、JProgressBar、ToolTip。

(6)可编辑信息的显示:向用户显示可被编辑的格式化信息的组件,如JColorChooser、JFileChooser、JTable、JTextArea。

3.

(1)面板(JPanel)。面板是一个轻量级容器组件,用于容纳界面元素,以便在布局管理器的设置下容纳更多的组件,实现容器的嵌套。JPanel、JScrollPane、JSplitPane和JInternalFrame都属于常用的中间容器,都是轻量级组件。JPanel的默认布局管理器是FlowLayout。

(2)分层面板(JlayeredPane)。Swing提供两种分层面板,即JLayeredPane和JDesktopPane。其中,JDesktopPane是JLayeredPane的子类,专门为容纳内部框架(JInternalFrame)而设置。

(3)滚动窗口(JScrollPane)。JScrollPane是带滚动条的面板,主要通过移动JViewport(视口)来实现。JViewport是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出视口下面的内容。

(4)分隔板(JSplitPane)。JSplitPane提供可拆分窗口,支持水平拆分和垂直拆分并带有滑动条。

(5)选项板(JTabbedPane)。JTabbedPane提供了一组可供用户选择的带有标签或图标的开关键。

(6)工具栏(JToolBar)。JToolBar是用于显示常用工具控件的容器。用户可以拖曳出一个独立的可显示工具控件的窗口。

(7)内部框架(JInternalFrame)。JInternalFrame就如同一个窗口在另一个窗口内部

4.略

第8章

1.一个进程可以包含多个线程。与进程不同,线程是一种特殊的多任务方式,也可以这样说,即线程是指程序的运行流程,多线程是一种机制,在这种机制下,可以同时运行多个程序块,从而使程序运行的效率变得更高,也可克服传统程序语言无法解决的问题。

2.可以通过继承Thread类或通过Runnable接口这两种方法来实现多线程。在程序开发中只要是多线程,一般都以实现Runnable接口为主。因为实现Runnable接口相比继承Thread类有如下好处。

(1)避免继承的局限,一个类可以继承多个接口。

(2)适合于资源共享。

3.如果多个线程同时运行,而且相互间需要传送数据,就必须使线程运行的步调一致,这样才能保证传送的数据及时、准确到达,这就是线程的同步。Java是通过对共享数据进行“互斥”锁定来实现线程同步的。

4.限定任何时刻只有一个线程对一个共享数据对象进行操作,从而保证数据对象的完整性和一致性。对于需要传送数据的多个线程必须同步运行,步调一致,保证传送的数据及时、准确到达。

5.一旦有多个线程,且它们都要争用对多个锁的独占访问,那么就有可能发生死锁。如果有一组进程或线程,其中每个都在等待一个只有其他进程或线程才可以进行的操作,那么就称它们被死锁了。在设计程序中,避免死锁的有效方法如下。(1)线程因为某个条件未满足而受阻,不能让其继续占有资源。(2)如果有多个对象需要互斥访问,应确定线程获得锁的顺序,并保证整个程序以相反的顺序释放锁。

第9章

1.JDBC驱动程序可分为以下4种。(1)JDBC-ODBC桥接的ODBC驱动程序;(2)用Java编写的JDBC本地API驱动程序;(3)JDBC网络的纯Java驱动程序;(4)本地协议的纯Java驱动程序

2.访问数据库使用的类为管理数据库驱动类DriverManager,DriverManager管理了一组JDBC驱动程序的基本服务。可以认为DriverManager是JDBC的管理层,作用于用户与驱动程序之间,同时跟踪可用的驱动程序,并在数据库与相应的驱动程序之间建立连接,还可以处理驱动程序登录时间限制、跟踪消息的显示等。相关的接口有:数据库连接接口Connection(Connection是与特定数据库的连接,其作用是连接上下文执行SQL语句并返回结果);发送SQL语句接口Statement(Statement用于执行静态SQL语句并返回它所生成结果的对象);可执行动态SQL语句的接口PreparedStatement(先发送带参数的SQL语句,再发送一组参数值);查询结果集接口ResultSet(Statement执行SQL语句后返回ResultSet结果集)。

3.通过JDBC操作数据库的步骤如下。(1)加载JDBC驱动程序。(2)创建数据库连接。(3)执行SQL语句。(4)处理结果集。(5)关闭连接。

4.常用的数据库操作包括在数据库中增加数据、删除数据、修

改数据和查询数据4类。

增加数据:insert into 表名称 values 字段1值, 字段2值, ……

删除数据:delete from 表名称 where 删除条件

修改数据:update 表名称 set 字段1名=字段1值 where 条件

查询数据:select 要查询的内容 from 表名称 where 查询条件

第10章

1.IP地址是用来唯一标识连接到Internet的计算机的数字地址,由32位二进制数(0或1)组成。这种表示方式便于计算机理解,却不利于人们的记忆和表示,所以人们将这32位二进制数用4位十进制数来表示。

由于现在每一台计算机上都同时运行着多个程序,为了与计算机上的指定程序通信,就需要用一个标识符来指定该程序,这个标识符就是端口号。端口号并不是计算机上物理存在的标识,而是一种软件抽象。当两台计算机的程序要进行通信时,需要知道要连接的计算机的IP地址和对应的端口号。

常用的端口号80是WWW服务的默认端口号,而21则是文件传输协议FTP的默认端口号。

2.Socket也被称为套接字,用于描述IP地址和端口,是一个通信链的句柄。应用程序可以通过Socket向网络发出请求或应答网络请求。

Socket也是一种软件抽象,并不是物理存在于计算机中的。Socket

将要进行通信的计算机IP地址、通信程序所使用的端口号合在一起。TCP/IP连接是可靠、双向、持续的点对点流式连接。Socket使用TCP通信,只要客户机遵循TCP/IP,服务器就可以对其请求进行服务,而不需要考虑客户机请求来自何处。因此,所有遵循TCP/IP的计算机都可以通过Socket进行通信。

在Java中,创建一个Socket并建立与其他计算机的连接后,就可以得到一个InputStream流和OutputStream流,便于通信双方进行信息交流。Java中有两类TCP套接字,一类是服务器套接字(ServerSocket),另一类是客户端套接字(Socket),ServerSocket类在客户机连接之前不做任何事,只是监听是否有客户机的连接请求,而Socket类则是用来建立连接服务器的套接字以及启动协议交换。也就是说,服务器端程序使用ServerSocket来监听指定的端口,客户端程序则使用Socket在相应的端口建立与服务器的连接。

3.客户机/服务器(client/server,C/S)体系结构是网络计算结构中最基本的一种。Server是提供服务的程序或能够提供服务程序的计算机,Client是请求服务的程序或运行请求服务程序的计算机,一个完整的网络应用系统是由Server端的应用程序和Client端的应用程序组成的。

随着Internet和WWW的流行,C/S结构的应用程序已经无法满足当前全球网络开放、信息随处可见和信息共享的新要求,于是就出现了B/S结构的应用程序。浏览器/服务器结构(browser/server,B/S)

是随着Internet技术的兴起,对C/S结构的一种变化或改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现的,极少部分的事务逻辑在浏览器端实现,但是主要的事务逻辑在服务器端实现,形成所谓三层结构。

4.基于Socket的应用程序虽然可以实现准确无误的通信,但是占用系统资源较多,因此,在设计和开发不需要实时交互操作的应用程序时,如收发E-mail程序和聊天程序,可以考虑使用无连接协议的数据报方式。

与TCP/IP中传输的信息和数据相比,Datagram有可能传送失败,或无法保证接收顺序与发送顺序的一致性,因此,对数据的结构要求也比Socket要稍微严格一点。但是其最大的优势就是网络传输速度,因为这种传输协议免去了很多繁琐的传输步骤,因此总性能上还是优于TCP/IP。

Java中用于实现无连接数据报通信的类有两个:DatagramPacket类和DatagramSocket类。其中,DatagramPacket类用于读取数据和包信息,DatagramSocket类用于实现数据报的发送和接收。


本文标签: 数据 方法 程序 对象 使用