《JAVA语言程序设计》期末考试试题及答案1

选择题


1. 编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( B )。

A. java
B. .class
C. html
D. .exe

答案:B

解释:
Java源文件扩展名为.java,经过Java编译器编译后生成的字节码文件扩展名是.class。这些.class文件包含Java虚拟机(JVM)可执行的字节码。


2. 设 x = 1, y = 2, z = 3,则表达式 y += z-- / ++x 的值是( A )。

A. 3
B. 3.5
C. 4
D. 5

答案:A

解释:

  1. 初始值:x = 1, y = 2, z = 3
  2. z-- 会先返回z的当前值(3),然后z减1,变为2。
  3. ++x 会先将x加1,变为2,再返回加后的值(2)。
  4. z-- / ++x 会进行整型除法:3 / 2 = 1
  5. y += 1y原来是2,加1后变为3。
    最终y的值是3。

3. 不允许作为类及类成员的访问控制符的是( C )。

A. public
B. private
C. static
D. protected

答案:C

解释:

  • publicprivateprotected 是Java中的访问控制符,用于定义类成员的可见性。
  • static 是一个修饰符,而不是访问控制符,它用于定义类的静态成员。因此不能作为类及类成员的访问控制符。

4. 为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。

A. static void method()
B. public void method()
C. final void method()
D. abstract void method()

答案:A

解释:

  • 要通过类名直接调用方法,必须将方法声明为static,使其成为类方法。
  • static void method() 表示无参数、无返回值的静态方法。
  • 其他选项没有static,无法直接通过类名调用。

5. 给定以下Java代码,编译运行后输出结果是( C ):

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
static int i; // 定义一个静态变量i
public int aMethod() {
i++; // 每次调用方法时,静态变量i自增1
return i; // 返回i的值
}

public static void main(String args[]) {
Test test = new Test();
test.aMethod(); // 第一次调用aMethod,i从0变为1
System.out.println(test.aMethod()); // 第二次调用aMethod,i从1变为2,输出2
}
}

A. 0
B. 1
C. 2
D. 3

答案:C

解释:

  1. static int i 默认值为0。
  2. 第一次调用aMethod()后,i从0变为1。
  3. 第二次调用aMethod()后,i从1变为2。
  4. 输出i的值,即2。


6. 如下哪个是合法的Java中的标识符( A )。

A. fieldname
B. super
C. 3number
D. #number

答案:A

解释:

  • fieldname 是一个合法的标识符,它符合命名规则:字母、数字、下划线或美元符号可以组成标识符,但不能以数字开头。
  • super 是Java的关键字,不能用作标识符。
  • 3number 以数字开头,不符合标识符命名规则。
  • #number 包含非法字符#,不能用作标识符。

7. 下面的代码段执行之后count的值是什么( D )。

1
2
3
4
5
int count = 1;
for (int i = 1; i <= 5; i++) {
count += i;
}
System.out.println(count);

A. 5
B. 1
C. 15
D. 16

答案:D

解释:

  1. 初始值:count = 1
  2. 循环中,每次将i加到count上:
    • i = 1时,count += 1count = 2
    • i = 2时,count += 2count = 4
    • i = 3时,count += 3count = 7
    • i = 4时,count += 4count = 11
    • i = 5时,count += 5count = 16
  3. 最后输出count的值为16。

8. 下列哪一个import命令可以使我们在程序中创建输入/输出流对象( C )。

A. import java.sql.;
B. import java.util.;
C. import java.io.;
D. import java.net.;

答案:C

解释:

  • import java.io.*; 用于导入输入/输出流类,包括FileInputStreamFileOutputStreamBufferedReaderPrintWriter等类。
  • java.sql 用于数据库操作,java.util 包含常用工具类,java.net 用于网络编程。
    因此,正确答案是java.io

9. 下列程序段执行后的结果是(A )。

1
2
3
4
String s = new String("abcdefg");
for (int i = 0; i < s.length(); i += 2) {
System.out.print(s.charAt(i));
}

A. aceg
B. ACEG
C. abcdefg
D. abcd

答案:A

解释:

  • 字符串 s = "abcdefg"s.length() 是7。
  • 循环的步长为2,所以i的值将分别是0, 2, 4, 6。
  • s.charAt(i) 在这些位置上分别输出字符a, c, e, g,因此输出是 aceg

10. Java“一次编译,随处运行”的特点在于其( A )。

A. 跨平台性
B. 面向对象型
C. 多线程性
D. 安全性

答案:A

解释:

  • Java的“一次编译,随处运行”指的是通过编译生成字节码(.class文件),这些字节码可以在任何支持Java虚拟机(JVM)的操作系统上运行。
  • 这就是Java的跨平台性,确保Java程序可以在不同平台上无缝运行。

填空题


1. 开发与运行Java程序需要经过的三个主要步骤为

答案: 编辑源程序、编译生成字节码、解释运行字节码

解释:
开发Java程序的主要步骤是:

  1. 编辑源程序:编写Java代码文件。
  2. 编译生成字节码:使用javac编译器将Java源代码编译成字节码文件(.class文件)。
  3. 解释运行字节码:使用Java虚拟机(JVM)解释并运行生成的字节码文件。

2. 在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占用 2 字节内存空间,这样,无论是中文字符还是英文字符,都是占用 2 字节内存空间。

解释:
Java中的char类型使用Unicode编码表示字符,且每个char类型的值都占用2个字节的内存空间。无论是英文字符还是中文字符,都占用相同的2个字节。


3. 设 x = 2 ,则表达式 ( x + + )/3 的值是 0 。

解释:
x++是后缀自增运算符,会先使用x的当前值,再执行x的自增操作。

  • 初始时,x = 2,执行x++时,x的值仍为2,x会在之后自增到3。
  • 表达式变为2 / 3,由于是整型除法,结果是0。
    因此,表达式的值为0

4. 若x = 5,y = 10,则x < y和x >= y的逻辑值分别为 true 和 false 。

解释:

  • x < y,即5 < 10,结果为true
  • x >= y,即5 >= 10,结果为false
    因此,逻辑值分别为truefalse

5. 抽象(abstract) 方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。最终(final) 方法是不能被当前类的子类重新定义的方法。

解释:

  • 抽象方法:没有方法体的定义,仅有方法签名,必须在抽象类中声明,并且子类必须实现这个方法。
  • 最终方法:使用final修饰的方法不能在子类中被重写。

6. 创建一个名为 MyPackage 的包的语句是 package MyPackage; ,该语句应该放在程序的位置为:

答案: 应该在程序第一句

解释:
package语句用于定义Java类所在的包,必须放在程序的第一行(在任何import语句之前)。它用于指定类所属的包名。


7. 设有数组定义:int MyIntArray[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70}; 则执行以下几个语句后的输出结果是 120。

1
2
3
4
5
6
int s = 0;
for (int i = 0; i < MyIntArray.length; i++) {
if (i % 2 == 1)
s += MyIntArray[i];
}
System.out.println(s);

答案: 120

解释:

  • MyIntArray数组为:{10, 20, 30, 40, 50, 60, 70}
  • 循环中,当i为奇数时,i % 2 == 1条件成立。
    • i = 1时,MyIntArray[1] = 20,加到s中,s = 20
    • i = 3时,MyIntArray[3] = 40,加到s中,s = 60
    • i = 5时,MyIntArray[5] = 60,加到s中,s = 120
      因此,输出结果是120

8. 在Java程序中,通过类的定义只能实现

答案: 单重继承,但通过接口的定义可以实现多重继承关系。

解释:

  • 类的继承:Java中不支持类的多重继承,即一个子类不能继承多个父类。但是通过接口可以实现多重继承,类可以实现多个接口。
  • 接口的继承:一个类可以实现多个接口,从而能够从多个来源继承方法,允许实现多重继承的关系。

9. 面向对象的软件开发方法用类把(数据)和基于数据的(操作)封装在一起。

答案: 数据、操作

解释:
面向对象的核心概念之一是封装。通过类,可以将数据(属性)和操作(方法)封装在一起,创建一个自包含的单位。这使得数据的访问受到控制,并且能够根据需求对数据进行操作。


10. 在Java语言中,用来分配内存的运算符是

答案: new

解释:
new运算符用于在Java中分配内存,创建对象或数组实例。使用new时,它会在堆内存中为对象分配空间,并返回该对象的引用。


11. 接口中的方法只能是_____抽象方法________。

答案: 抽象方法

解释:
在Java接口中,方法默认是抽象的,即只有方法的声明,没有方法的实现。接口中的方法只能声明为抽象方法,不能有方法体(在Java 8及以后,接口可以有默认方法和静态方法,但普通方法仍然是抽象的)。


12. javax.swing包中的 JMenu 类是负责创建菜单的,它的一个实例就是一个菜单。

解释:
JMenujavax.swing包中的一个类,负责在Swing应用程序中创建菜单。它是一个菜单项容器,允许用户通过菜单与应用程序交互。通过创建JMenu的实例,可以定义应用程序中的菜单内容。

写出下面程序的运行结果


1. 程序分析

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.*;
public class abc
{
public static void main(String args[])
{
AB s = new AB("Hello!","I love JAVA.");
System.out.println(s.toString());
}
}
class AB {
String s1;
String s2;
public AB(String str1, String str2)
{
s1 = str1;
s2 = str2;
}
public String toString()
{
return s1 + s2;
}
}

运行结果:
Hello! I love JAVA.

解释:

  • AB类的构造函数中,s1被赋值为 "Hello!"s2被赋值为 "I love JAVA."
  • toString()方法将返回"Hello! I love JAVA.",并打印出来。

2. 程序分析

代码:

1
2
3
4
5
6
7
8
9
10
11
12
import java.io.*;
public class abc
{
public static void main(String args[])
{
int i, s = 0;
int a[] = { 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 };
for (i = 0; i < a.length; i++)
if (a[i] % 3 == 0) s += a[i];
System.out.println("s=" + s);
}
}

运行结果:
s = 180

解释:

  • 数组a中包含9个整数。程序遍历数组,判断能被3整除的数(10, 20, 30, 40, 50, 60, 70, 80, 90)。
  • 满足条件的数有30, 60, 90,它们的和是30 + 60 + 90 = 180,所以输出结果是s = 180

3. 程序分析

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Parent {
String one, two;
public Parent(String a, String b) {
one = a;
two = b;
}
public void print() {
System.out.println(one);
}
}
public class Child extends Parent {
public Child(String a, String b) {
super(a, b);
}
public void print() {
System.out.println(one + " to " + two);
}
public static void main(String args[]) {
Parent p = new Parent("south", "north");
Parent t = new Child("east", "west");
p.print();
t.print();
}
}

运行结果:

1
2
south
east to west

解释:

  • Parent类的print()方法只输出one的值。
  • Child类重写了print()方法,输出one + " to " + two
  • main()方法中,创建了Parent类和Child类的实例,分别调用了print()方法。
  • 第一次调用p.print()输出"south",第二次调用t.print()输出"east to west"

编程题


1. Java GUI应用程序:矩形周长和面积

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import javax.swing.JOptionPane;
public class Rect {
public static void main(String args[]) {
String s;
double length, width, girth, area;
s = JOptionPane.showInputDialog("输入矩形的长:");
length = Double.parseDouble(s);
s = JOptionPane.showInputDialog("输入矩形的宽:");
width = Double.parseDouble(s);
girth = (length + width) * 2;
area = length * width;
JOptionPane.showMessageDialog(null, "周长为:" + girth + "\n" + "面积为:" + area);
}
}

解释:

  • 该程序使用JOptionPane从用户输入长和宽,计算矩形的周长和面积。
  • 输入长和宽后,周长是 (length + width) * 2,面积是 length * width
  • 最后,使用JOptionPane.showMessageDialog显示结果。

2. Java程序输出班级和姓名

代码:

1
2
3
4
5
public class HelloJava {  //类定义正确3分
public static void main(String[] args) {//2分
System.out.println("学号=2013001,姓名=张三");//5分
}
}

解释:

  • 该程序通过System.out.println输出了一个班级和姓名的字符串。
  • 运行后,控制台会输出学号=2013001,姓名=张三