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

一.判断题


1. 在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。

答案:√

解释:

  • 在多个catch语句中,异常类型的子类应放在父类前面。如果父类放在前面,将导致子类异常永远不会被捕获,因为父类类型已经捕获了所有该类及其子类的异常。

2. 子类只能继承父类的public,protected和同一个包中的package级的成员。

答案:√

解释:

  • 子类可以继承父类的publicprotected成员,以及父类在同一个包中的默认访问级别成员,但不能继承父类的private成员。

3. 在类中实现一个接口,则一定要实现接口中的所有方法。

答案:×

解释:

  • 如果一个类实现了接口,但没有实现接口中的所有方法,那么该类必须被声明为abstract类。否则,编译器会报错。也就是说,抽象类可以选择不实现接口中的所有方法。

4. 抽象方法不仅有方法头,还应该有方法体。

答案:×

解释:

  • 抽象方法只有方法头,没有方法体。方法体在继承该方法的子类中提供。

5. 在比较str1和str2两个字符串对象值是否相等时使用语句str1==str2。

答案:√

解释:

  • 使用==比较的是两个对象的引用地址,而不是内容。在比较字符串内容时,应该使用str1.equals(str2),因为equals()方法比较的是字符串的内容。

6. Java的源代码中定义几个类,编译结果就生成几个以.class为后缀的字节码文件。

答案:√

解释:

  • 每个类都会生成一个对应的字节码文件。即使源代码中定义了多个类,编译后也会为每个类生成相应的.class文件。

7. Java程序里, 创建新的类对象用关键字new,回收无用的类对象使用关键字free。

答案:×

解释:

  • 在Java中,类对象的回收是由垃圾回收机制(GC)自动完成的,不需要使用free关键字。free是C语言中的函数,Java使用垃圾回收器来回收不再使用的对象。

8. 构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void。

答案:×

解释:

  • 构造函数的名字必须与类名相同,但构造函数没有返回类型,包括void。它的作用是初始化新创建的对象。

9. 如果源文件包含import语句,则该语句必须是除空行和注释行外的第一个语句行。

答案:√

解释:

  • 在Java源代码中,import语句必须出现在类声明之前,可以在类定义之前有空行和注释,但import语句应该排在它们之后。

10. 拥有abstract方法的类是抽象类,但抽象类中可以没有abstract方法。

答案:√

解释:

  • 一个类如果含有abstract方法,则该类必须是抽象类。但是,抽象类也可以没有任何abstract方法,它仅仅表示该类不能直接实例化。

11. 静态初始化器是在其所属的类加载内存时由系统自动调用执行。

答案:√

解释:

  • 静态初始化器(static块)在类第一次加载时由JVM自动执行,通常用于初始化类的静态成员。

12. 在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象。

答案:×

解释:

  • 在Java中,赋值一个对象变量给另一个对象变量时,实际上是复制了引用,而不是创建一个新对象。两个变量将指向同一个对象。

13. Java applet也能够存取客户机磁盘上的文件。

答案:√

解释:

  • Java Applet本身是有一定限制的,但是可以通过设置特定的安全权限来允许Applet访问客户机的文件系统。但这种操作通常受限于浏览器的安全策略。

14. 进程是程序的一次动态执行过程。一个进程在其执行过程中,可以产生多个线程——多线程,形成多条执行线索。

答案:√

解释:

  • 进程是程序在计算机中执行的实例。一个进程可以包含多个线程,多个线程并行执行,构成多线程的并发执行环境。

选择题


1. Java application中的主类需包含main方法,以下哪项是main方法的正确形参?

A. String args
B. String args[]
C. Char arg
D. StringBuffer args[]

答案:B

解释:

  • 在Java应用程序中,main方法的标准形式是:public static void main(String[] args)。所以正确的形参应该是String[] args,表示接受一个字符串数组作为命令行参数。

2. 以下关于继承的叙述正确的是:

A. 在Java中类只允许单一继承
B. 在Java中一个类只能实现一个接口
C. 在Java中一个类不能同时继承一个类和实现一个接口
D. 在Java中接口只允许单一继承

答案:A

解释:

  • 在Java中,类只允许单一继承,即一个类只能继承一个父类。但是,Java允许一个类实现多个接口,支持多重接口继承。选项B、C、D都不准确。

3. paint()方法使用哪种类型的参数?

A. Graphics
B. Graphics2D
C. String
D. Color

答案:A

解释:

  • paint()方法的参数类型是Graphics,这是用于绘制图形的类。Graphics2DGraphics的子类,它提供了更强大的绘图功能,但paint()方法的参数类型仍然是Graphics

4. 以下哪个不是Java的原始数据类型?

A. int
B. Boolean
C. float
D. char

答案:B

解释:

  • Java的原始数据类型包括intfloatchar等。Boolean是一个包装类,而非原始数据类型。Boolean用于表示逻辑值(true/false),它是类而不是原始数据类型。

5. 若需要定义一个类域或类方法,应使用哪种修饰符?

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

答案:A

解释:

  • 如果需要定义一个类域(静态变量)或类方法,应该使用static修饰符。static表示该字段或方法属于类,而不是某个特定的对象实例。packageprivatepublic修饰符用于访问控制,而不专门用于表示类域或类方法。

6. 在浏览器中执行 Applet 程序,以下选项中的哪个方法将被最先执行?

选项:

  • A. init()
  • B. start()
  • C. destroy()
  • D. stop()

答案: A. init()

解释: 在浏览器中执行 Java Applet 程序时,init() 方法是最先执行的。它用于初始化 applet,并且只在 applet 加载时执行一次。


7. 有以下程序片段,下列哪个选项不能插入到行 1?

程序片段:

1
2
3
4
1.
2. public class Interesting{
3. //do sth
4. }

选项:

  • A. import java.awt.*;
  • B. package mypackage;
  • C. class OtherClass{ }
  • D. public class MyClass{ }

答案: D. public class MyClass{ }

解释: 在 Java 中,一个文件中只能有一个 public class,而且它的名称必须与文件名相同。因此,插入 public class MyClass{ } 会导致类名冲突,不能插入。


8. 设有下面两个赋值语句:

1
2
a = Integer.parseInt("12");
b = Integer.valueOf("12").intValue();

下述说法正确的是?

选项:

  • A. a 是整数类型变量,b 是整数类对象。
  • B. a 是整数类对象,b 是整数类型变量。
  • C. ab 都是整数类对象并且值相等。
  • D. ab 都是整数类型变量并且值相等。

答案: D. ab 都是整数类型变量并且值相等。

解释: Integer.parseInt() 返回的是基本数据类型 int,而 Integer.valueOf() 返回的是 Integer 对象,调用 .intValue() 后将其转换为基本数据类型 int。因此,ab 都是 int 类型变量且值相等。


9. FilterOutputStreamBufferedOutputStreamDataOutputStreamPrintStream 的父类,以下哪个类可能是 FilterOutputStream 构造函数的参数类型?

选项:

  • A. OutputStream
  • B. File
  • C. InputStream
  • D. BufferedOutputStream

答案: A. OutputStream

解释: FilterOutputStream 构造函数接受一个 OutputStream 类型的参数,OutputStream 是所有输出流的父类。因此,选项 A 正确。FileInputStream 不符合要求,而 BufferedOutputStreamFilterOutputStream 的一个子类。


10. 在编写 Java Applet 程序时,需在程序的开头写上哪条语句?

选项:

  • A. import java.awt.*;
  • B. import java.applet.Applet;
  • C. import java.io.*;
  • D. import java.awt.Graphics;

答案: B. import java.applet.Applet;

解释: 在编写 Java Applet 程序时,必须导入 java.applet.Applet 类,以便创建 applet。因此,选项 B 正确。


11. 在使用 interface 声明一个接口时,只可以使用哪个修饰符修饰该接口?

选项:

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

答案: D. public

解释: 在 Java 中,接口只能使用 public 修饰符来声明,其他修饰符(如 privateprotectedprivate protected)是不允许的。接口默认是公共的,必须用 public 关键字来声明。


12. Java 源文件和编译后的文件扩展名分别为?

选项:

  • A. .class.java
  • B. .java.class
  • C. .class.class
  • D. .java.java

答案: B. .java.class

解释: Java 源代码的文件扩展名为 .java,编译后的字节码文件扩展名为 .class


13. 下列说法中,不正确的一项是?

选项:

  • A. Java 程序只有两类:Application 和 Applet
  • B. 类的方法只能由 public 修饰
  • C. 面向对象的程序设计的优点有可重用性、可扩展性、可管理性
  • D. Java 语言通过接口支持多重继承

答案: B. 类的方法只能由 public 修饰

解释: 方法不仅可以由 public 修饰,还可以使用 privateprotected 或默认访问修饰符。因此,选项 B 不正确。


14. main() 方法是 Java Application 程序执行的入口点,关于 main() 方法的方法头,下面哪一项是合法的?

选项:

  • A. public static void main()
  • B. public static void main(String args[])
  • C. public static int main(String[] args)
  • D. public void main(String args[])

答案: B. public static void main(String args[])

解释: Java 的 main() 方法必须是 publicstaticvoid,并且接受一个 String[] 类型的参数。选项 B 正确。选项 A 缺少参数,选项 C 返回类型不对,选项 D 缺少 static 修饰符。


15. 在类中若要处理 ItemEvent 事件,则该类需要实现的接口是?

选项:

  • A. ItemListener
  • B. ActionListener
  • C. itemStateChanged
  • D. Event

答案: A. ItemListener

解释: ItemEvent 是用来处理与项(如复选框、单选按钮)状态改变相关的事件。要处理该事件,必须实现 ItemListener 接口,并重写其 itemStateChanged() 方法。


16. 将 GUI 窗口中的组件按照从左到右排列的布局管理器是?

选项:

  • A. FlowLayout
  • B. BorderLayout
  • C. GridLayout
  • D. CardLayout

答案: A. FlowLayout

解释: FlowLayout 是一个将组件从左到右排列的布局管理器,当容器宽度不足时,自动换行。其他布局管理器的布局方式不同,BorderLayout 用于将组件放入五个区域,GridLayout 按网格排列组件,CardLayout 用于实现卡片式布局。


程序题


1. 以下程序的输出结果为 "相等"。

1
2
3
4
5
6
7
8
9
10
11
class StringTest1 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = new String("hello");
if (s1.equals(s2)) {
System.out.println("相等");
} else {
System.out.println("不相等");
}
}
}

答案: 相等

解释: 在 Java 中,equals() 方法用于比较两个字符串的内容是否相等,而 == 比较的是引用地址。即使 s2 是通过 new 创建的对象,它的内容与 s1 是相同的,所以 s1.equals(s2) 返回 true,输出 "相等"。


2. 以下程序段的输出结果为 "5 6 7 8 9"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class TestArray {
public static void main(String[] args) {
int i, j;
int a[] = { 5, 9, 6, 8, 7 };
for (i = 0; i < a.length - 1; i++) {
int k = i;
for (j = i; j < a.length; j++) {
if (a[j] < a[k]) k = j;
}
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
for (i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
}

答案: 5 6 7 8 9

解释: 该程序实现的是选择排序(Selection Sort),它会将数组中的元素按从小到大的顺序进行排序。排序后的数组是 [5, 6, 7, 8, 9],然后通过 for 循环打印每个元素,输出结果为:5 6 7 8 9


3. 写出以下程序的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.*;

public class TestFile {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new FileWriter("input.txt"));
String s;
while (true) {
System.out.print("请输入一个字符串: ");
System.out.flush();
s = br.readLine();
if (s.length() == 0) break;
bw.write(s);
bw.newLine();
}
bw.close();
}
}

功能: 从键盘逐一输入字符串,逐一输出至 input.txt 文件中,直至输入空行。

解释: 该程序从控制台读取输入的字符串并将其写入到文件 input.txt 中。每次输入一个字符串,程序会将该字符串写入文件并换行。当输入空字符串时(即直接按回车),循环结束,程序关闭文件。

阅读以下程序,写出输出结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Animal {
Animal() {
System.out.print("Animal ");
}
}

public class Dog extends Animal {
Dog() {
System.out.print("Dog ");
}

public static void main(String[] args) {
Dog snoppy = new Dog();
}
}

答案: Animal Dog

解释:

  1. 程序中定义了两个类:AnimalDogDog 类继承自 Animal 类。
  2. Animal 类的构造函数在创建 Animal 类的对象时被调用,输出 "Animal "
  3. Dog 类的构造函数在创建 Dog 类的对象时被调用,输出 "Dog "
  4. main() 方法中,new Dog() 会先调用 Animal 类的构造函数,然后再调用 Dog 类的构造函数。
  5. 因此,输出顺序为先输出 "Animal ",然后输出 "Dog "

最终输出结果是:Animal Dog