Java程序设计课后练习答案.docx
《Java程序设计课后练习答案.docx》由会员分享,可在线阅读,更多相关《Java程序设计课后练习答案.docx(47页珍藏版)》请在冰豆网上搜索。
Java程序设计课后练习答案
《Java程序设计》课后练习答案
第一章Java概述
一、选择题
1.(A)是在Dos命令提示符下编译Java程序的命令,(B)是运行Java程序的命令。
A.javac
B.java
C.javadoc
D.javaw
2.(D)不是Java程序中有效的注释符号。
A.//
B./**/
C./***/
D.*/*/
3.(B)不是Java语言的特点。
A.面向对象
B.自动检查语法错误
C.跨平台
D.解释执行
4.Java编译器会将Java程序转换为(C)
A.可执行代码
B.目标代码
C.字节码
D.机器代码
5.Java源文件的扩展名是(D)
A..classB..jarC..javD..java
二、简答题
1、Java的跨平台的含义是什么?
为什么Java可以跨平台?
Java语言的一个非常重要的特点就是平台无关性。
它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。
Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。
JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。
Java编程人员在编写完Java程序后,Java编译器将Java源代码文件编译后生成字节码文件(一种与操作系统无关的二进制文件)。
字节码文件通过Java虚拟机(JVM)里的类加载器加载后,经过字节码校验,由解释器解释成当前电脑的操作系统能够识别的目标代码并最终运行。
以下图展示了Java程序从编译到最后运行的完整过程。
2、简述Java语言的特点
Java具有以下特点:
1)、简单性
Java语言的语法规则和C语言非常相似,只有很少一部分不同于C语言,并且Java还舍弃了C语言中复杂的数据类型(如:
指针和结构体),因此很容易入门和掌握。
2)、可靠性和安全性
Java从源代码到最终运行经历了一次编译和一次解释,每次都有进行检查,比其它只进行一次编译检查的编程语言具有更高的可靠性和安全性。
3)、面向对象
Java是一种完全面向的编程语言,因此它具有面向对象编程语言都拥有的封装、继承和多态三大特点。
4)、平台无关和解释执行
Java语言的一个非常重要的特点就是平台无关性。
它是指用Java编写的应用程序编译后不用修改就可在不同的操作系统平台上运行。
Java之所以能平台无关,主要是依靠Java虚拟机(JVM)来实现的。
Java编译器将Java源代码文件编译后生成字节码文件(一种与操作系统无关的二进制文件)。
字节码文件通过Java虚拟机(JVM)里的类加载器加载后,经过字节码校验,由解释器解释成当前电脑的操作系统能够识别的目标代码并最终运行。
下图展示了Java程序从编译到最后运行的完整过程。
5)、分布式
分布式包括数据分布和操作分布,而Java支持WWW客户机/服务器计算模式,因此也支持这两种分布式。
6)、多线程
Java在两方面支持多线程。
一方面,Java环境本身就是多线程的。
若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。
如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。
三、综合编程题
1、请编写一个简单的Java程序能够输出“这是我的第一个Java程序”。
(注意为程序添加合适的注释和文档注释)。
/**
*第一个java程序
*/
publicclassDemo{
/**
*main方法,程序的起点
*/
publicstaticvoidmain(String[]args){
//向控制台输出
System.out.println("这是我的第一个Java程序");
}
}
第二章Java语法基础
一、选择题
1.下面哪个单词是Java语言的关键字(B)?
A.c2cX.}#f%W3O9@$@7cDoubleB.thisC.stringD.bool
2.下面属于Java关键字的是(D)。
A.NULLB.IFC.DoD.goto
3.在启动Java应用程序时可以通过main()方法一次性地传递多个参数。
如果传递的参数有多个,可以用空格将这些参数分割;如果某一个参数本身包含空格,可以使用(B)把整个参数引起来。
A.单引号B.双引号A2@!
l&h&I:
Q$a'H4o4S
4.下面哪个是Java语言中正确的标识符(BD)。
A.5xB.$xC.abc@D.com
5.Java语言中,下列标识符错误的是(D)。
A._*A,\/A"|%labcB.abcC.ABCD.5abc
6.在Java中,整型常量不可以是(A)。
A.!
r;\*z&V'D0T0`)_doubleB.LongC.intD.byte
7.在Java中,不属于整数常量的是(D)。
A.:
n"h:
R-C+D100B.100LC.0x100AD.6.0f
8.下面哪个语句能定义一个字符变量chr(B)。
A.charchr=’abcd’;B.charchr=’\uabcd’;
C.charchr=”abcd”;D.charchr=\uabcd;
9.下面哪个是对字符串s1的不正确定义(CD)。
A.Strings1=”abcd”;B.Strings1;
C.2V2X2U0F4\*x)Strings1=‘abcd\0’;D.Strings1=”\abcd”;
10.下面哪个范围是char型的取值范围(C)。
A.-256~255B.-(2^15)~(2^15)-1C.\u0000’~‘\uffff’D.0~32767
11.下面哪条语句不能定义一个float型的变量f1(ABD)。
A.-y"c!
B&Q$@)m'W-pfloatf1=3.1415E10B.floatf1=3.14C.floatf1=3.1415FD.f1=3.14F
12.下列运算结果为float的是(C)。
A.100/10B.100*10C.100.0+10D.100-10
13.数组中可以包含什么类型的元素(D)。
A.int型B.string型C.数组D.以上都可以
14.Java中定义数组名为xyz,下面哪项可以得到数组元素的个数(B)。
A.xyz.length()B.xyz.lengthC.len(xyz)D.ubound(xyz)
15.下面哪条语句定义了3个元素的数组(A)。
A.int[]a={20,30,40};B.inta[]=newint(3);C.int[3]array;D.int[]arr;
二、简答题
1.Java有哪些基本的数据类型?
写出这些基本数据类型所占用的最大空间(用字节描述)。
2.说明Java字符编码的类型与特点。
3.写出Java中六个常用的转义字符。
4.下面的几个标示符哪些是正确的,哪些是错误的,如果是错误的,请说明原因。
MyClass,_isHis,3JavaProgram,_$asdf,Java-Visual-Machine
5.说出常量与变量的定义并举例说明。
6.什么是强制类型转换?
并说明其运用场合。
7.描述Java程序的构成。
如何判断Java程序的主类?
下面的程序有哪些错误并改正,该程序的源代码应当保存为什么名字的文件?
publicclassMyClass{
publicstaticvoidmain(){
System.out.printIn("mynameis…");
}
System.out.printIn(“theend!
”);
}
8.结构化程序设计有哪三种基本流程?
分别对应Java中的那些语句?
9.在一个循环中使用break,continue,return的差别。
10.数组的定义,特点与分类。
如何进行数组的初始化?
第三章面向对象的实现
一、选择题
1.在Java中,用package说明一个包时,该包的层次结构必须是(B)。
A.与文件的结构相同B.与文件的目录层次相同
C.与文件的类型相同D.与文件大小相同
2.下列构造方法的调用方式中,正确的是(C)。
A.按照一般方法调用B.由用户直接调用
C.可通过new自动调用D.被系统调用
3.int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是(D)。
A.publicintMAX_LENGTH=100B.finalintMAX_LENGTH=100
C.publicconstintMAX_LENGTH=100D.publicfinalintMAX_LENGTH=100
4.在Java中,以下叙述不正确的是(B)
A.构造方法名与类名相同。
B.构造方法不是用来完成初始化的。
C.构造方法由new操作调用,而不能被用户直接调用。
D.构造方法没有返回类型。
5.在Java中,下面的叙述哪个是不正确的?
(D)
A.类的静态方法可以在该类的对象被创建前调用
B.类的静态方法不能访问该类的非静态方法
C.abstract修饰符可以出现在类或方法的前面,但不能出现在变量之前
D.final修饰符可以出现在类或变量之前,但不能出现在方法之前
6.在Java里,下列选项(D)不是实现面向对象思想的机制。
A.封装B.继承
C.多态D.数据类型转换
7.类Worker是类Person的子类,Worker构造方法中有一句"super();",该语句是什么意思?
(C)
A.调用类Worker中定义的super()方法
B.调用类Person中定义的super()方法
C.调用类Person的构造函数
D.语法错误
8.给定Java程序,如下:
编译运行Test.java,结果是(C)。
publicclassTest{
privatestaticfinalintcounter=10;
publicstaticvoidmain(String[]args){
System.out.println(counter++);
}
}
A.10B.编译错误
C.11D.运行时出现异常
9.给定如下Java代码,编译时会在(D)出现错误。
(只选择一项)
classParent{
}
classChildextendsParent{
publicstaticvoidmain(String[]args){
Parentp1=newChild();//第一行
Parentp2=newParent();//第二行
Childc1=newChild();//第三行
Childc2=newParent();//第四行
}
}
A.第一行B.第二行
C.第三行D.第四行
10.在Java中,某类方法使用下列(BC)访问修饰符修饰后,可以被其的子类访问。
A.privateB.protected
C.publicD.friendly
11.在Java语言中,如果你有下面的类定义:
abstractclassShape{
abstractvoiddraw();
}
classSquareextendsShape{
}
以下描述正确的是(B)
A.一切成功编译
B.Shape可以编译,Square不能编译
C.Square可以编译,Shape不能编译
D.Square,Shape都不能编译
12.分析下列Java代码:
classA{
publicstaticvoidmain(String[]args){
method();
}
staticvoidmethod(){
System.out.println("Hello");
System.exit(0);
System.out.println("good-bye");
}
}
编译运行后,输出结果是(A)。
A."Hello"B."good-bye"
C."Hello"后面是"good-bye"D.代码不能编译
13.下表是final修饰符与变量、方法、类等一起作用的结果的对应表,但是对应关系存在错误,请选择正确的对应关系。
(C)
概念作用
1变量A不能再产生子类
2方法B一旦赋值,就不能更改
3类C不能在子类中覆盖
A.1-A2-B3-C
B.1-C2-A3-B
C.1-B2-C3-A
D.1-C2-B3-A
14.有以下程序:
publicclassConstOver{
publicConstOver(intx,inty,intz){}
}
下面哪个方法重载了上面的ConstOver构造方法?
(B)
A.protectedintConstOver(){}
B.privateConstOver(intz,inty,bytex){}
C.publicobjectConstOver(intx,inty,intz){}
D.publicvoidConstOver(bytex,bytey,bytez){}
15.有以下程序:
classBaseClass{
privatefloatx=1.0f;
publicfloatgetVar()(returnx;)
}
classSubclassextendsBaseClass{
privatefloatx=2.0f;
//insertcodehere
}
下面哪个方法加到程序中的“//insertcodehere”位置是有效的重定义父类的方法。
(B)
A.protectedfloatgetVar(){returnx;}
B.publicfloatgetVar(){returnx;}
C.protectedfloatdoublegetVar(){returnx;}
D.publicfloatgetVar(floatf){returnf;}
16.指出下列程序运行的结果(B)
publicclassExample{
Stringstr=newString("good");
char[]ch={'a','b','c'};
publicstaticvoidmain(String[]args){
Exampleex=newExample();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
System.out.print(ex.ch);
}
publicvoidchange(Stringstr,charch[]){
str="testok";
ch[0]='g';
}
}
A.goodandabcB.goodandgbc
C.testokandabcD.testokandgbc
17.下列哪些语句关于内存回收的说明是正确的?
(B)
A.程序员必须创建一个线程来释放内存;
B.内存回收程序负责释放无用内存;
C.内存回收程序允许程序员直接释放内存;
D.内存回收程序可以在指定的时间释放内存对象。
18.创建一个名为“MyClass.java”的文件,该文件中只有一个可被整个工程中的所有类访问的类,那么该类的正确声明应为:
(C)
A.privateclassMyClassextendsObjectB.classTestClassextendsObject
C.publicclassMyClassD.publicclassTestClass
19.下列叙述中,错误的是(A)
A.内部类的名称与定义它的类的名称可以相同
B.内部类可用abstract修饰
C.内部类可作为其他类的成员
D.内部类可访问它所在类的成员
20.用于在子类中调用被重写的父类方法的关键字是(B)
A.this
B.super
C.This
D.Super
21.下面程序输出结果是(A)
publicclassDelta{
staticbooleanfoo(charc){
System.out.print(c);
returntrue;
}
publicstaticvoidmain(String[]argv){
inti=0;
for(foo('A');foo('B')&&(i<2);foo('C')){
i++;
foo('D');
}
}
}
A.ABDCBDCB
B.ABCDABCD
C.编译错误
D.运行时异常
二、程序阅读题
1、写出以下程序的运行结果:
classEgg{
protectedclassYolk{
publicYolk(){
System.out.println("Egg.Yolk()");
}
}
privateYolky;
publicEgg(){
System.out.println("NewEgg()");
y=newYolk();
}
}
publicclassBigEggextendsEgg{
publicclassYolk{
publicYolk(){
System.out.println("BigEgg.Yolk()");
}
}
publicstaticvoidmain(String[]args){
newBigEgg();
}
}
运行结果:
NewEgg()
Egg.Yolk()
2、写出以下程序的结果:
publicclassTest{
privatestaticvoidprintArray(int[]arr) {
for(inti=0;i System.out.print(arr[i]+”,”);
System.out.println(“\n”);
}
privatestaticvoidchangeValue(intvalue){
value*=2;
}
privatestaticvoidchangeValue(int[]arr){
for(inti=0;i arr[i]*=2;
}
publicstaticvoidmain(String[]args){
int[]arr={1,2,3,4,5};
changeValue(arr[0]);
printArray(arr);
changeValue(arr);
printArray(arr);
}
}
运行结果:
1,2,3,4,5,
2,4,6,8,10,
3、指出以下程序的错误,并改正:
publicclassMain{
publicstaticfinalAobj=null;
publicstaticvoidmain(String[]args){
obj=newA();
}
}
classA{
}
错误:
final的对象不能改变。
4、指出以下程序的错误,并改正:
publicclassTest{
publicstaticvoidmain(String[]args){
MyClassobj=newMyClass();
obj.Info+=”,World!
”;
System.out.println(obj.Info);
}
}
classMyClass {
publicStringInfo=”Hello”;
publicMyClass(StringInfo)
{
this.Info=Info;
}
}
错误:
MyClassobj=newMyClass();找不到匹配的构造方法。
5、指出下面程序的错误,并改正:
abstractclassAnimal {
publicabstract voidsaySomething() {
System.out.println(“你想说什么就说吧!
”);
}
}
classDogextendsAnimal{
publicvoidsaySomething(){
System.out.println(“我现在有了第二职业:
捉耗子!
”);
}
}
publicclassTest{
publicstaticvoidmain(String[]args){
Animalani=newDog();
ani.saySo