收藏 分销(赏)

《Java程序设计实用教程(第4版)习题解答与实验指导》第1-8章.doc

上传人:xrp****65 文档编号:6128895 上传时间:2024-11-28 格式:DOC 页数:62 大小:1.05MB
下载 相关 举报
《Java程序设计实用教程(第4版)习题解答与实验指导》第1-8章.doc_第1页
第1页 / 共62页
《Java程序设计实用教程(第4版)习题解答与实验指导》第1-8章.doc_第2页
第2页 / 共62页
《Java程序设计实用教程(第4版)习题解答与实验指导》第1-8章.doc_第3页
第3页 / 共62页
《Java程序设计实用教程(第4版)习题解答与实验指导》第1-8章.doc_第4页
第4页 / 共62页
《Java程序设计实用教程(第4版)习题解答与实验指导》第1-8章.doc_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、Java程序设计实用教程(第4版)习题解答与实验指导叶核亚 编著2013年11月目录“Java程序设计”课程教学要求1第1章 Java概述3第2章 Java语言基础5第3章 类的封装、继承和多态22第4章 接口、内部类和 Java API基础38第5章 异常处理43第6章 图形用户界面45第7章 多线程50第8章 输入/输出流和文件操作52“Java程序设计”课程教学要求1. 课程性质、目的和任务程序设计是高等学校计算机学科及电子信息学科各专业本科的核心专业基础课程,是培养学生软件设计能力的重要课程。在计算机学科的本科教学中,起着非常重要的作用。“Java程序设计”是计算机科学与技术专业本科的

2、专业基础限选课,开设本课程的目的是:进行程序设计和面向对象方法的基础训练;使用Java编程技术,设计解决操作系统、网络通信、数据库等多种实际问题的应用程序。本课程通过全面、系统地介绍Java语言的基础知识、运行机制、多种编程方法和技术,使学生理解和掌握面向对象的程序设计方法,理解和掌握网络程序的特点和设计方法,建立起牢固扎实的理论基础,培养综合应用程序的设计能力。本课程的先修课程包括:C/C+程序设计I、C/C+程序设计II、数据结构、操作系统、计算机网络、数据库原理等。2. 教学基本要求本课程的基本要求如下。 了解Java语言特点,理解Java Application应用程序的运行原理和方法

3、。掌握在JDK环境中编译和运行程序的操作,熟悉在MyEclipse集成开发环境中,编辑、编译、运行和调试程序的操作。 掌握Java语言中语句、数组、引用类型等基本语法成分的使用方法,通过类、接口、内嵌类型、包、异常处理等机制表达和实现面向对象程序设计思想。 掌握Java的多种实用技术,包括图形用户界面、多线程、文件操作和流、使用URL和Socket进行网络通信等。 熟悉Java JDBC数据库应用的设计方法。 熟悉基于JSP的Web应用设计方法。重点:面向对象概念,图形用户界面,线程,流与文件操作,Socket通信。难点:继承和多态,线程同步,流与文件操作,Socket通信,JDBC,JSP。

4、3. 学时分配本课程学时为64学时,其中讲课48学时,实验16学时。学时分配见下表。章节(或内容)讲课实验合计Java概述22Java语言基础44类的封装、继承和多态628接口、内部类和Java API基础426异常处理22图形用户界面628多线程426输入/输出流和文件操作628网络通信628数据库应用224Web应用426综合应用设计22合 计4816644. 实验教学目标与基本要求“Java程序设计”是理论与实践相结合的课程,不仅要求学生掌握基础知识,理解基本原理,更要在实践环节中培养软件设计的基本技能。实践性环节是巩固所学理论知识、积累程序设计经验的必不可少的重要环节,是提高程序设计能

5、力和计算机操作技能的有力保障。实验和课程设计等都是加强程序设计训练所必需的实践环节。课程实验要求是,熟练使用一种Java开发环境(如MyEclipse),掌握编译、运行和调试Java程序的操作,针对不同情况进行软件测试,完善程序并提高程序性能。实验类型有验证和设计两种。验证型实验的要求是,仿制已有例题,验证面向对象程序设计的理论和方法,理解基本原理;设计型实验的要求是,应用图形用户界面、线程、Applet、文件操作和流、网络通信、数据库应用等章的知识点,掌握解决这些实际应用问题的软件设计方法,设计具有一定规模、较复杂、较综合并解决实际问题的应用程序,具备独立分析问题、解决问题的能力和综合应用程

6、序的设计能力。本课程安排的上机实验学时为16时,课内开设的8个实验说明如下。项 目内 容实验时数实验1Java语言基础和面向对象概念训练2实验2接口和实现接口的类,异常处理2实验3图形用户界面2实验4线程设计,线程互斥与同步2实验5输入/输出流,文件操作2实验6URL、TCP Socket、UDP Socket等网络通信2实验7JDBC数据库应用设计2实验8基于JSP的Web应用设计2实验题有详细的实验训练目标、设计内容和设计要求。每次实验要求学生独立完成至少一个程序的编写和运行,写出实验报告。实验报告内容包括:题目、题意解释、题意分析、设计方案、流程描述、源程序清单、程序运行结果、程序存在问

7、题和改进意见等。第1章 Java概述本章教学内容及要求如下: 了解Java语言特点,理解Java Application应用程序的运行原理和方法,理解由Java虚拟机支持的程序运行机制。 掌握在JDK环境中编译和运行程序的操作,熟悉在MyEclipse集成开发环境中编辑、编译、运行和调试程序的操作。重点:掌握在JDK和MyEclipse环境中编译和运行Java Application应用程序的操作。1.1 了解Java1-1 Java具有哪些适合在Internet环境中运行的特点?【答】跨平台特性、完全面向对象和简单性、可靠性、安全性、多线程、支持分布式网络应用等。1-2 什么是跨平台特性?J

8、ava怎样实现跨平台特性?【答】跨平台特性是指一个应用程序能够运行于不同的操作系统平台。Java采用虚拟机技术支持跨平台特性,不同的操作系统上运行不同版本的Java虚拟机。1-3 Java源程序文件编译后生成什么文件?程序的运行机制是怎样的? 【答】Java将源程序文件(*.java)中的每个类编译生成一个字节码文件(.class),由Java虚拟机解释执行字节码文件。1-4 Java应用程序有哪两种形式?它们的运行方式有什么不同?【答】Java应用程序有两种:Application和Applet。Application是能够独立运行的应用程序,有控制台和图形用户界面两种运行方式。Applet

9、是可以嵌入Web页面的最小应用,它不能独立运行,必须嵌入超文本(*.html)中,由浏览器中的Java解释器解释执行。1.2 JDK1-5 环境变量path和classpath的作用分别是什么?【答】path提供可执行文件(.exe)的路径;classpath提供类文件(.class)的路径。1-6 什么是包?为什么需要包机制?【答】包(package)是类的集合。包是Java区别类名字空间的机制。一个包中的多个类之间不能重名,不同包中的类名则可以相同。【习1.3】 为例1.2的Line类增加以下方法:public double length() /返回直线长度 int a=start.x-e

10、nd.x, b=start.y-end.y; return Math.sqrt(a*a+b*b); /Math.sqrt(x)返回x的平方根1-7 Java对源程序文件中的声明语句及文件其命名规则有什么要求?【答】在一个Java源程序文件(*.java)中,可以使用package语句声明包,使用import语句导入包,之后使用class或interface声明多个类或接口。其中,声明为public权限的类或接口只能有一个,且文件名必须与该类名相同。1-8 程序中的错误有哪几种?分别在什么时刻被发现?【答】语法错、语义错、逻辑错。编译时能够发现语法错,运行时能够发现语义错,运行时不能发现逻辑错。

11、第2章 Java语言基础本章教学内容及要求如下: 掌握Java语言的基本语法成分,包括标识符与关键字、数据类型、运算符、表达式、变量声明等语言成分,掌握分支、循环等流程控制语句的语法和使用。特别注意与C/C+的不同之处。 掌握数组类型的声明和动态内存申请,掌握以基本数据类型和类的两种方式声明和使用字符串。 掌握Java语言的方法声明和调用规则,掌握基本类型和引用类型作为方法参数和返回值的传递规则。 掌握MyEclipse程序调试技术。重点:数组的引用模型;使用静态方法,引用类型作为方法的参数和返回值。难点:位运算,二进制;递归算法。MyEclipse程序调试技术。2.1 语言成分1. 数据类型

12、、变量及运算2-1 Java语言的基本数据类型有哪些?引用数据类型有哪些?【答】基本数据类型有:整数类型byte、short、int、long,浮点数类型float、double,字符类型char,布尔类型boolean;引用数据类型包括数组(array)、类(class)和接口(interface)。2-2 与C+语言相比,Java语言的变量和常量声明有什么差别?【答】Java语言没有全局变量,(成员)局部变量含义及变量声明格式与C+相同。Java语言没有宏替换,使用最终变量概念代替C+中的常量和宏替换。使用final关键字声明最终变量,只能赋值一次,这样既增加了常量功能,又避免全局变量和宏

13、替换的副作用。2-3 Java语言的运算分哪些类型?与C+语言相比,运算符及运算含义有哪些变化?【答】Java语言有算术运算、关系运算、位运算、逻辑运算、赋值运算、强制类型转换、条件运算、括号运算、点运算、new、+字符串连接运算和instanceof运算等,其中+字符串连接和instanceof运算符是Java新增的,此外,放弃了C+的sizeof运算符。与C+语言相比,Java语言的语法更为严谨,将C+中某些容易引起混淆的语法做了修订,编译时也将严格进行检查。在Java语言中,运算符及运算含义有变化的说明如下。 没有赋值功能的表达式不能作为语句。例如:int i=0;i+1; /编译错“无

14、效的赋值运算” 逗号是分隔符,仅用于分隔表达式,不是运算符,不能出现在表达式中。例如:for (int i=0, j=0; in & jn; i+, j+) /正确,逗号是分隔符int x=0, y=0; /正确,逗号是分隔符System.out.println(+(x=1,y=2); /编译错,表达式不能包含逗号x=1, y=2; /编译错,逗号仅用于分隔表达式,不是运算符x=1;y=2; /正确 Java语言增加boolean类型用于逻辑运算,其值不是0或1。例如:boolean b=0; /编译错“不能将int类型转换成boolean类型”关系运算、逻辑运算和instanceof运算的结

15、果都是boolean类型。整数不能进行逻辑运算。Java语言严格区分boolean与int类型,运算类型不能混淆。boolean类型与整数类型或其他类型不能进行算术运算、关系运算、逻辑运算。例如:boolean b=false +0; /编译错“boolean类型与int类型不能进行+运算”if、while等语句中的条件表达式不能是赋值运算,否则产生编译错。if (i=0) /编译错,i=0运算结果是int类型,而不是booleanwhile (i=0) /编译错 字符串连接运算符(+)自动将其他类型变量值转换成字符串类型。2. 整数运算的数据类型及数据溢出2-4 表达式(byte)127+(

16、byte)127的运算结果是_,其数据类型是_。【答】254,int解释Java的整数默认是int类型,byte类型只是形式上的,取相应int值的最低1个字节。所有byte和short整数运算仍然是int类型运算,运算结果是int类型,当运算结果在byte数据范围内时,也可视作byte类型。2-5 已知Integer.MAX_VALUE值为2147483647,表达式Integer.MAX_VALUE+1的运算结果是_。【答】-2147483648,即0x80000000解释Integer.MAX_VALUE值为0x7fffffff,0x7fffffff+1=0x80000000,数据溢出。运

17、算过程如图2.1所示。图2.3 int整数数据溢出2-6 设int min=Integer.MIN_VALUE;,表达式min+min的运算结果是_。【答】0解释Integer.MIN_VALUE值为0x80000000,0x80000000+0x80000000=0,数据溢出。2-7 设int min=Integer.MIN_VALUE;,表达式(long)(min+min)的运算结果是_。【答】0解释Integer.MIN_VALUE值为0x80000000,0x80000000+0x80000000=0,数据溢出。强制类型转换,只是把0强制转换成long类型。2-8 设int min=I

18、nteger.MIN_VALUE;,表达式(long)min+(long)min的运算结果是_。【答】0xffffffff 00000000,或-4294967296。解释Integer.MIN_VALUE值为0x80000000,先强制转换成long类型,值为0xffffffff80000000,再作为long类型运算,数据不溢出。2-9 设int min=Integer.MIN_VALUE; long g=min+min;,则g的值是_。【答】0解释min+min作为int类型运算,数据溢出。2-10 设int min=Integer.MIN_VALUE; long g=min; g+=m

19、in;,则g的值是_。【答】0xffffffff 00000000,或-4294967296。解释long g=min; 赋值将min自动扩容到long类型,再运算,long数据不溢出。3. 整数位运算2-11 表达式125&10的值是_,表达式125 | 10的值是_。【答】8,127解释int整数二进制位运算,运算过程如图2.2所示。图2.5 int整数二进制位运算4. 浮点数运算2-12 设double x,将x按四舍五入方式强制转换成int类型的表达式的是_。【答】(int)(x+0.5)5. 字符类型及运算2-13 Java语言的char字符类型与C/C+语言相比有什么差别?【答】两

20、者字符常量表示形式相同,都是用单引号将字符括起来作为字符常量。不同之处如下: C/C+语言的char类型表示ASCII字符,包括数字、字母、符号等,字长为1字节,取值范围为0127;一个汉字用2字节表示。 Java语言的char类型表示Unicode字符,包括ASCII字符和汉字等,一个ASCII字符和汉字均占用2字节,取值范围为u0000uFFFF(即065535)。2-14 表达式a+1的运算结果是_,(char)(a+1)的运算结果是_。【答】98,b解释char也是数值类型,可将char看成是2字节无符号整数,范围是065535。1是int类型,4字节。a+1进行的是算术运算,操作数的

21、数据类型相容,结果取较长的int数据类型,a+1运算含义为将a的ASCII码97加1。(char)(a+1)将98强制转换成char类型,结果为b。2-15 设char ch1=108, ch2=73;,以下语句有什么错误?如何改正? ch1=ch1+ch2; 【答】编译错,不能将int转换成char。改正如下:ch1=(char)(ch1+ch2);解释与byte和short类型存储和运算原理相同,char也是以int存储和运算的,在065535范围内的整数可看成一个Unicode字符的编码,因此能够以字符显示。两个char作为数值参加算术运算时,仍然是int类型运算,运算结果是int类型。

22、所以,不能赋值给char变量。2.2 流程控制语句2-16 Java语言的语句与C/C+语言有什么差别?【答】Java语言语句的语法同C/C+语言,Java语言不支持goto语句。【习2.7】 理解Java的字符类型。 以下程序段输出ASCII码可打印字符表。System.out.println(ASCII码可打印字符(u0021u007e)表);for (char ch=u0021; ch=u007e; ch+) /输出ASCII码可打印字符表 System.out.print(ch+ ); if (ch%32=0) System.out.println(); 程序运行结果如下:ASCII码

23、可打印字符(u0021u007e)表! # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z | 修改上述程序段的for语句表达式如下,输出Unicode汉字字符表。for (char ch=u4e00; ch=u9fa5; ch+) /Unicode汉字字符表一龥 Unicode字符的取值范围是065535(u0000uffff),反之,

24、并不是065535之中每个值都对应一个字符,标准输出语句输出没有对应字符的编码时,输出结果是问号“?”。例如,128没有对应字符,以下欲输出编码为128的字符,输出结果是问号。System.out.println(char)128); /输出“?”2-17 指出下列程序段中的错误以及出错原因。int s=0;for (int i=0; i10; i+) s+=i;i+;【答】最后一句产生编译错。变量i的作用域在for语句中,在for语句之外则不能使用。2.3 数组1. 一维数组2-18 与C/C+的数组相比,Java的数组做了哪些改进?具有怎样的优越性?【答】 Java数组都是动态数组,在声明

25、数组变量之后,使用new运算符申请数组存储空间。 提供length属性表示数组长度。 Java的数组是引用数据类型,两个数组变量之间的赋值是引用赋值,传递地址等引用特性,没有申请新的存储空间。 Java将严格检查数组元素下标范围,程序运行时,如果ai的下标i取值超出0a.length-1范围,则作为错误处理,产生“数组下标越界”异常,程序运行终止。 数组名不作指针使用。2-19 以下数组声明错误的是_。(A)int a; (B)int a3; (C)int a=1,2,3; (D)int a=new int3;【答】B解释Java数组是动态数组,声明数组变量时不需要接线指定数组长度,只有使用n

26、ew运算符申请数组存储空间时才需要指定数组长度。2-20 设int a=new int5, b=a; 执行语句b0=99;后,a中各元素值为_。【答】99,0,0,0,0解释Java的数组是引用数据类型,两个数组变量之间的赋值是引用赋值,即两个数组变量引用同一个数组,修改其中某一元素将同时改变另一数组变量的相应元素,如图2.3所示。图2.11 数组的引用模型2. 二维数组2-21 画出下列程序段表示mat存储结构示意图,并写出其中数据。int n=5, k=1;int mat =new int n;for (int i=0; in; i+) mati=new int n-i; for (int

27、 j=0; j、=、=运算符比较大小。String字符串是类,提供equals(obj)方法判断是否相等,返回boolean类型。提供compareTo(cobj)比较大小,返回int类型,当返回0时,表示两者相等;当返回正数时,表示当前对象大;当返回负数时,表示当前对象小,说明详见教材第4章Comparable接口。2-29 怎样将数值按指定格式转换成字符串? 【答】String声明如下静态方法format()返回指定格式的字符串:public static String format(String format, Object. args) /返回format指定格式的字符串其中,格式字符

28、串format定义为:%参数索引$宽度.精度变换类型变换类型取值有:b(boolean)、c(字符)、C(字母大写)、d(十进制整数)、o(八进制整数)、x(十六进制整数)、e(浮点数指数形式)、f(浮点数小数形式)、s(字符串字母小写)、S(字符串字母大写)。参数索引指定第几个参数,省略时为默认次序。当指定宽度不足时,以实际宽度显示;可用变量指定宽度。例如:String.format(%4d,1) /结果为“ 1”。宽度为4位,不足时,前补空格String.format(%04d,1) /结果为“0001”。宽度不足4位时,前补0String.format(%+4d,Integer.MIN_

29、VALUE) /结果为“-2147483648”。+表示总显示正负号 /当指定宽度不足时,以实际宽度显示String.format(%,d,Integer.MAX_VALUE) /结果为“2,147,483,647”。以,逗号作千位分隔String.format(Sum=1+.+%2$d=%1$d,55,10)/结果为“Sum=1+.+10=55”String.format(%x, 0177) /八进制整数0177的十六进制形式为“7f”String.format(%o, 0x80000000) /十六进制整数0x80000000的八进制形式“20000000000”String.format

30、(%8x, 127) /十进制整数127的十六进制形式为“ 7f”String.format(%08x, 255) /十进制整数255的十六进制形式为“000000ff”String.format(%08x, -1) /十进制整数-1的十六进制形式为“ffffffff”String.format(%+08x, -1) /运行错,抛出异常,十六进制不支持正负号String.format(%9.2f, 1234.56789) /结果为“ 1234.57”。以9位宽度2位小数表示浮点数String.format(%e, 1234.56789) /结果为“1.234568e+03”,浮点数科学记数法格

31、式int n=10;String.format(%+n+c, ) /返回长度为n的空格字符串。用变量指定宽度2. 标准输入2-30 程序运行时有哪几种方式能够输入数据?怎样获得输入数据?输入数据是什么类型?怎样获得输入数值数据?【答】输入数据方式有多种:命令行参数、标准输入和图形用户界面等。 命令行参数JDK和MyEclipse均提供命令行参数输入方式,操作命令详见教材第1章。程序通过main(String args)方法的args参数获得命令行参数输入的以空格分隔的多个字符串,见教材第1章例1.1。 标准输入使用标准输入常量System.in调用InputStream字节输入流类的read(

32、)方法获得从键盘输入的数据,要处理异常。异常和流的基本概念详见教材第5、9章,例见教材例2.10和以下习2.7。 图形用户界面从图形用户界面的文本行等编辑组件中可获得输入数据,详见教材第6章。上述三种方式输入的数据都是String类型。如果要输入数值数据,就先输入字符串,再将字符串转换成数值。3. 将数值字符串转换成相应数值2-31 怎样将数值字符串转换成其所表示的整数或浮点数数值?【答】 调用java.lang.Integer类的以下静态方法parseInt(s)将字符串s转换成十进制整数。public static int parseInt(String s) throws NumberFormatException 调用java.lang.Double类的以下静态方法parseDouble(s)将字符串s转换成浮点数值。public static double parseDouble(String s) throws NumberFormatException 如果字符串不能转换成整数或浮点数,将抛出数值格式异常。详见教材第45章。【习2.15】 获得实数字符串表示的浮点数值。本例实现java.lang.Double类中parseDouble(s)方法,从实数字符串获得其表示的浮点数值。给出两种算法。 由数字序列和运算符

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服