【计算机二级Java语言】卷012
选择题
公共知识
【1】下列叙述中正确的是()。
算法的效率与问题的规模和数据的存储结构都有关, A错误。
算法的时间复杂度, 是指执行算法所需要的计算工作量, B正确。
由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同, 因此数据的逻辑结构和存储结构不是一一对应的, C错误。
算法的时间复杂度和空间复杂度没有直接的联系, D错误。
算法的时间复杂度, 是指执行算法所需要的计算工作量, B正确。
由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同, 因此数据的逻辑结构和存储结构不是一一对应的, C错误。
算法的时间复杂度和空间复杂度没有直接的联系, D错误。
【2】下列叙述中正确的是()。
线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;
(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
用一组任意的存储单元来依次存放线性表的结点, 这组存储单元既可以是连续的, 也可以是不连续的, 甚至是零散分布在内存中的任意位置上的。
因此C正确。
用一组任意的存储单元来依次存放线性表的结点, 这组存储单元既可以是连续的, 也可以是不连续的, 甚至是零散分布在内存中的任意位置上的。
因此C正确。
【3】某二叉树共有12个结点, 其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)()。
二叉树中, 度为0的节点数等于度为2的节点数加1, 即n2 = n0 - 1, 叶子节点即度为0, n0 = 1, 则n2 = 0, 总节点数为12 = n0 + n1 + n2 = 1 + n1 + 0, 则度为1的节点数n1 = 11, 故深度为12, 选D。
【4】对长度为n的线性表作快速排序, 在最坏情况下, 比较次数为()。
快速排序最坏情况就是每次选的基准数都和其他数做过比较, 共需比较(n - 1) + (n - 2)+…+1 = n(n - 1) / 2, 选D。
【5】结构化程序设计中, 下面对goto语句使用描述正确的是()。
结构化程序设计中, 要注意尽量避免goto语句的使用, 故选C。
【6】下面不属于软件测试实施步骤的是()。
软件测试主要包括单元测试、集成测试、确认测试和系统测试。
【7】下面不属于软件需求分析阶段主要工作的是()。
需求分析阶段的工作可概括为4个方面:①需求获取。
②需求分析。
③编写需求规格说明书。
④需求审评。
②需求分析。
③编写需求规格说明书。
④需求审评。
【8】一般情况下, 当对关系R和S进行自然连接时, 要求R和S含有一个或者多个共有的()。
自然连接是一种特殊的等值连接, 它满足下面的条件:①两关系间有公共域;
②通过公共域的等值进行连接, 选C。
【9】有三个关系R, S和T如下:
则由关系R和S得到关系T的操作是()。
则由关系R和S得到关系T的操作是()。
关系T是关系R的一部分, 并且是关系R去掉R和S相同的元素, 符合差操作。
【10】有表示公司和职员及工作的三张表, 职员可在多家公司兼职。其中公司C(公司号, 公司名, 地址, 注册资本, 法人代表, 员工数), 职员S(职员号, 姓名, 性别, 年龄, 学历), 工作W(公司号, 职员号, 工资), 则表W的键(码)为()。
由于职员可以再多加公司兼职, 表W的键(码)应为公司关系和职员关系的主码, 即公司号和职员号。
专业知识
【11】下列关于package语句的说法中, 错误的是
在包下面建一个文件, package语句在第一行, 选项A正确;
package语句有且只能有一个, 选项B错误;
package语句必须在除注释外的第一行才可以通过编译, 选项C正确, 如果没有在包下建.class文件, eclipse会自动添加包名为当前的项目名;
选项D正确, 本题答案为B。
【12】Java编译器会将Java程序转换为一种代码, 该代码是
Java编译器会将Java程序编译成.class结尾的字节码文件, 所以选项A正确;
字节码文件需要在虚拟机里面运行, 并不是可执行代码, 所以选项B错误;
JVM会把.class转换成本地机器码进行运行, 所以C错误。
本题答案为A。
本题答案为A。
【13】下列变量名中不合法的是
变量名可以由字母组成, 也可以由字母开头, 选项A正确;
变量名可以由下划线组成, 也可以由下划线开头, 选项B正确;
变量名可以是下划线, 字母, $, 数字组成, 选项C正确;
变量名不能由数字开头, 选项D错误。
本题答案为D。
本题答案为D。
【14】下列代码段执行后, k 的值为
int x = 3, y = 4;
int k = ++x * y++;
本题考查的是++i 和 i++的区别, ++i是i的值先加1, 然后再进行运算, 而i++是先将i 进行运算, 然后再自身加1, 本题第二行代码k = 4 * 4为16, 答案C正确。
计算完x的值为4, y的值为5。
本题答案为C。
计算完x的值为4, y的值为5。
本题答案为C。
【15】下列选项中的逻辑运算符是
||是逻辑或, 所以选项A正确, ?:是三目运算符, >>是带符号右移, >=是关系运算符, 本题答案为A。
【16】下列代码段执行后, m 的值为
int x = 3, y = 8, z = 5, m;
if (x > y)
m = x;
else
m = y;
if (m < z)
m = z;
本题考查的是"="的用处, 在java运算符中"="是赋值的作用, 第二行代码, (x > y)结果为false, 执行第五行代码, m = y, 然后m = 8;
继续执行第六行代码, (m < z)的结果为false, 不执行第七行代码, 程序结束, 最后的结果m的值为8, 选项C正确。
【17】下列代码段执行后的结果是
int sum = 0;
for (int i = 1; i < 10; i = i + 2)
if (i % 3 == 0)
sum += i;
System.out.println(sum);
本题考查的是java的for循环和算术运算符, sum += i等同于sum = sum + i;
在for循环里i的值可以取到1, 3, 5, 7, 9, 而只有满足是3的倍数才会进行if条件里面的操作, 第一次, sum += 3;
sum的值为3, 第二次sum += 9;
sum的值为12, 最后输出的结果为12, 选项C正确。
本题答案为C。
本题答案为C。
【18】下列选项中, 循环会无限执行的是
本题考查的两种循环结构, for循环和while循环, 因为选项C里面i的值没有自增, 一直都是1, 一直都满足i < 10的条件。
所以会导致程序陷入死循环。
所以选项C正确。
本题答案为C。
所以会导致程序陷入死循环。
所以选项C正确。
本题答案为C。
【19】下列代码段执行后的结果是
int x = 5;
do {
x *= 2;
System.out.print(" " + x);
} while (x <= 5);
本题考查的是do while的结构, 该结构至少会执行一次循环体。
第一次打印x的值为10, 然后不满足x < 5的条件, 跳出循环。
所以选项B正确。
本题答案为B。
第一次打印x的值为10, 然后不满足x < 5的条件, 跳出循环。
所以选项B正确。
本题答案为B。
【20】下列代码段执行后的结果是
int k = 0;
int[] num = { 3, 8, 2, 8, 5 };
for (int i = 0; i < 5; i++) {
if (num[i] > num[k]) {
k = i;
}
}
System.out.print(" " + k);
本题考查循环结构和"="的赋值作用, 第一次循环if条件不满足, k = 0;
i++后值为1, 第二次循环, 判断条件为true, k = 1, i++后为2, 第三次循环, 条件为false, k值不变为1, i++后为3, 判条件为false, k值不变为1, i++后为4, 第四次循环, 条件为false, k值不变为1, i++后为5, i < 5不满足for循环的条件, 循环结束, 最后k的值为1, 答案选B。
本题答案为B。
本题答案为B。
【21】若数组a定义为 int[][] a = new int[3][4], 则a是
单行单列的数组是一维数组, 多行多列的数组为二维数组。
本题的数组是一个三行四列的二维数组, 所以选项B正确。
本题答案为B。
本题的数组是一个三行四列的二维数组, 所以选项B正确。
本题答案为B。
【22】关于下列代码的说法中, 正确的是
public class Animal {
static int[] legs = new int[10];
public static void main(String[] args) {
System.out.println(legs[9]);
}
}
本题考查数组中基本数据类型的默认值, 整数类型的默认值为0, 浮点类型的默认值为0.0, 字符类型的默认值为/u0000, 布尔类型的默认值为false, 所以选项C正确。
本题答案为C。
本题答案为C。
【23】下列代码的第10行语句运行时, 将执行的语句是
1 class Animal {
2 public void bark(String i, String j) {
...
}
3 public void bark(String i) {
...
}
4
}
5 public class Dog extends Animal {
6 public void bark() {
...
}
7 8 public static void main(String[] args) {
9 Animal a = new Animal();
10 a.bark("bowwow");
11
}
12
}
本题考查的是子类继承父类中的成员方法(除了被private修饰的), 父类中方法重写了bark();
根据参数类型, 调用的是只有一个参数的bark()方法, 所以执行第三行代码。
选项B正确。
本题答案为B。
选项B正确。
本题答案为B。
【24】StringBuffer类对象的长度是
StringBuffer对象的每次修改都会改变对象自身, 且还是之前的对象, 在内存中的地址不变。
所以选项A错误, C正确, 长度是可变的, 因此没有字符个数的限制, 所以BD错误。
本题答案为C。
所以选项A错误, C正确, 长度是可变的, 因此没有字符个数的限制, 所以BD错误。
本题答案为C。
【25】下列代码中构造方法的返回类型是
public class Town {
public static void main(String[] args) {
Town c = new Town();
}
Town() {
System.out.println("Living in Town");
}
}
本题考查的是构造方法的特点:1没有返回值, 且不能用void修饰, 2方法名和类名一致, 3不能直接调用, 而是在你new该类的对象的时候自动调用。
所以本题答案选E。
所以本题答案选E。
【26】下列代码的运行结果是
public class ThrowsException {
static void proc(int sel) throws ArithmeticException, ArrayIndexOutOfBoundsException {
System.out.println("In Situation" + sel);
if (sel == 0) {
System.out.println("no Exception caught");
return ;
} else if (sel == 1) {
int iArray[] = new int[4];
iArray[4] = 3;
}
}
public static void main(String args[]) {
try {
proc(0);
proc(1);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("catch " + e);
} finally {
System.out.println("in proc finally");
}
}
}
本题考查异常的相关知识, 首先找到main函数, proc(0);
调用ThrowsException类相关的方法, 先打印In Situation0, 然后通过if条件语句, 打印"no Exception caught", 继续执行proc(1), 先打印In Situation1, 然后通过if条件语句, 因为iArray[4]该行代码下标越界, 所以报的是下标越界异常, 紧接着catch捕获了该异常并执行catch代码块里面的内容, finally代码块里面的内容无论有没有捕获到异常都一定会执行, 所以综合判断, 本题答案选B。
【27】下列代码的运行结果是
public class ValuePass {
boolean fact;
public static void main(String args[]) {
float f;
ValuePass vp = new ValuePass();
f = 10;
System.out.println("float is:" + f);
vp.changeFloat(f);
System.out.println("changed float is:" + f);
vp.fact = true;
System.out.println("fact is:" + vp.fact);
vp.changeFact(vp);
System.out.println("changed fact is:" + vp.fact);
}
public void changeFact(ValuePass vp) {
vp.fact = false;
}
public void changeFloat(float f) {
f = 20;
}
}
本题考查全局变量与局部变量的作用范围问题, vp.changeFloat(f);
该方法里面的f是形式参数, 也是局部变量, 只能在该方法中起作用, 不会影响到方法外的全局变量的值。
所以第二次打印f的值还是10.0, 而在changeFact(ValuePass vp)方法中, 通过对象来获取该类的成员变量, 所以, 会, 打印了false。
综合分析, 本题答案为A。
所以第二次打印f的值还是10.0, 而在changeFact(ValuePass vp)方法中, 通过对象来获取该类的成员变量, 所以, 会, 打印了false。
综合分析, 本题答案为A。
【28】下列代码的运行结果是
public class StringTest {
public static void main(String args[]) {
char chars[] = { 'J', 'a', 'v', 'a', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e' };
String s = new String(chars);
String s1 = s.replace('a', 'b');
System.out.println(s1);
}
}
本题考查的是String类的replace()方法, 将该字符串中所有的'a'用'b'来代替掉, 所以答案D正确。
本题答案为D。
本题答案为D。
【29】下列说法中正确的是
RandomAccessFile是java.io包中的一个兼有输入输出功能的类, 所以A错误, RandomAccessFile既实现了DataInput接口, 又实现了DataOutput接口, 所以CD错误。
本题答案为B。
本题答案为B。
【30】下列代码实现了以对象流方式向score.txt文件写入数据的功能。下划线处应填入的代码是
import java.io.*;
public class testOut {
public static void main(String[] args) {
int[] data = new int[3];
data[0] = 100;
data[1] = 95;
data[2] = 80;
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("score.txt"));
out.________(data);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在API文档中, writeObject()方法是 将指定的对象写入 ObjectOutputStream, 所以本题选D。
选项A和B两个方法不存在。
本题答案为D。
选项A和B两个方法不存在。
本题答案为D。
【31】在随机文件流RandomAccessFile类中不能实现数据读取的方法是
skipBytes()尝试跳过输入的 n 个字节以丢弃跳过的字节, 本题答案为C。
【32】下列能判断"score.dat"文件是否存在的语句是
本题考查File类的exists()方法, 通过该方法的返回值为布尔类型, 该方法是没有参数的且不是静态方法么不能通过类名直接调用, 所以BC错误, D是完全语法错误。
本题答案为A。
本题答案为A。
【33】JOptionPane类中的参数message的作用是
本题从字面意思解释就是信息的含义, 而message的作用是对对话框中的内容进行了一些描述。
本题答案为D。
本题答案为D。
【34】下列选项中不是事件处理过程中所涉及的对象是
事件保护是事件处理过程中的应用, 不属于该问题所涉及的对象。
本题答案为D。
本题答案为D。
【35】当鼠标拖动时, 产生的事件是
ActionEvent回车事件, ButtonEvent按钮事件, FocusEvent鼠标聚焦事件, MouseEvent鼠标事件, 所以本题答案为D。
【36】为了使下列程序正常运行并且输出10以内的偶数, 在下划线处应填入的是
class Test4 {
int i = 0;
public void run() {
while (i++ < 10)
if (i % 2 == 0)
System.out.println(i);
}
public static void main(String[] args) {
Thread t = new;
t.start();
}
}
创建线程的两种方法要么实现Runnable接口要么继承Thread类, 本题正常运行并且输出10以内的偶数, 根据t.start();
是启动线程, 需要让Tes4类成为线程, 再根据main函数中的多态, 则Test4需要继承Thread类。
综合考虑答案A正确。
本题答案为A。
综合考虑答案A正确。
本题答案为A。
【37】要实现线程同步, 建议使用的方法是
在java.lang.object中, 实现线程通信有两个方法:wait()和notify(), 它们可以完成线程间同步。
其中wait()方法使线程等待, 并且暂时释放其占有的对象锁。
notify()方法通知因调用wait()方法而等待的线程重新占有该对象锁。
本题答案为D。
其中wait()方法使线程等待, 并且暂时释放其占有的对象锁。
notify()方法通知因调用wait()方法而等待的线程重新占有该对象锁。
本题答案为D。
【38】在堆栈类TheStack的定义中, 为了保证堆栈在并发操作中数据的正确性, 应在下划线处填入的代码是
public class TheStack {
_________ int idx = 0;
_________ char[] data = new char[10];
public synchronized void push(char c) {
……
}
public synchronized void pop() {
……
}
}
public:访问控制符指明该类为公共类, 可被其他类访问或引用其成员变量和成员方法。
为了保证堆栈在并发操作中数据的正确性, 必须定义成公共变量。
选项C正确, 本题答案为C。
为了保证堆栈在并发操作中数据的正确性, 必须定义成公共变量。
选项C正确, 本题答案为C。
【39】下列关于Applet的叙述中, 正确的是
Applet是Java与Web相结合而引入的重要的Java应用形式。
Applet是Java类, 但自身不能运行, 必须嵌入在其他应用程序中运行, 因此不能直接由java.exe解释执行, 选项A说法错误。
Applet的主类必须是java.appletApplet或JApplet类的子类。
Applet与Application的主要区别在执行方式上, Application以main()方法为入口点运行, Applet要在浏览器或appletviewer中运行, 运行过程比Application更复杂。
所以本题答案选C。
Applet是Java类, 但自身不能运行, 必须嵌入在其他应用程序中运行, 因此不能直接由java.exe解释执行, 选项A说法错误。
Applet的主类必须是java.appletApplet或JApplet类的子类。
Applet与Application的主要区别在执行方式上, Application以main()方法为入口点运行, Applet要在浏览器或appletviewer中运行, 运行过程比Application更复杂。
所以本题答案选C。
【40】下列程序定义了一个Applet, 在下划线处应填入的是
import java.awt.*;
import java.applet.*;
public class SayHi extends __________ {
public void paint(Graphics g) {
g.drawString("Hi!", 40, 40);
}
}
含有Applet的网页的HTML文件代码中部带有这样一对标记, 当支持Java的网络浏览器遇到这对标记时, 就将下载相应的小应用程序代码并在本地计算机上执行该Applet。
本题答案为D。
本题答案为D。
编程题
【41】在考生文件夹下存有文件名为Java_1.java文件, 该程序是不完整的, 请在注释行"//*********Found*********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或其他已有语句内容。存盘时, 文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
请完善程序, 并进行调试, 使程序输出结果如下:
本题的要求是:
请完善程序, 并进行调试, 使程序输出结果如下:
1.swing 2.s1 equals \"hello\"\n"
3.showMessageDialog
本题考查考生对swing窗口中相关构件的应用掌握
填空1 : JOptionPane类是在swing包下的, 所以导包应导入swing包
填空2:因为s1.equals("hello")的结果为true, 所以执行里面的内容, 根据弹框上面s1.equals"hello", 所以的得出结论该空填字符串s1.equals"hello".
填空3:参见API可得 JOptionPane.showMessageDialog()方法用于一个弹出的窗口, 可用于信息框, 提示框。
填空1 : JOptionPane类是在swing包下的, 所以导包应导入swing包
填空2:因为s1.equals("hello")的结果为true, 所以执行里面的内容, 根据弹框上面s1.equals"hello", 所以的得出结论该空填字符串s1.equals"hello".
填空3:参见API可得 JOptionPane.showMessageDialog()方法用于一个弹出的窗口, 可用于信息框, 提示框。
【42】在考生文件夹中存有文件名为Java_2.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
在主线程中创建一个线程, 该线程休眠50ms, 然后再给变量i赋值。主线程要
等该子线程结束后获得i的值并输出。程序的输出结果如下:
j = 10, a.i = 10
本题的要求是:
在主线程中创建一个线程, 该线程休眠50ms, 然后再给变量i赋值。主线程要
等该子线程结束后获得i的值并输出。程序的输出结果如下:
j = 10, a.i = 10
1.start 2.Runnable 3.sleep 4.catch
本题考查考生对线程知识点的掌握
填空1:线程的启动方法为start()方法。
填空2:创建线程的方式有两种, 继承Thread类和实现Runnable接口, 本题程序可以根据 Thread t = new Thread(a); 判断出创建线程的方式是实现Runnable接口。
填空3:线程休眠的方法为sleep()方法, 方法中的参数以毫秒为单位。
填空4:处理异常的方式, try代码块中是可能出现的异常代码, catch语句块是对try语句块里面出现的异常进行的处理。
填空1:线程的启动方法为start()方法。
填空2:创建线程的方式有两种, 继承Thread类和实现Runnable接口, 本题程序可以根据 Thread t = new Thread(a); 判断出创建线程的方式是实现Runnable接口。
填空3:线程休眠的方法为sleep()方法, 方法中的参数以毫秒为单位。
填空4:处理异常的方式, try代码块中是可能出现的异常代码, catch语句块是对try语句块里面出现的异常进行的处理。
【43】在考生文件夹中存有文件名为Java_3.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
显示一个带"Welcome to Beijing"标题的天坛风景图片, 图片的下方有"The Temple of Heaven"的图片说明。要求考生对Java_3.java进行完善并调试, 使程序的运行结果如下。
本题的要求是:
显示一个带"Welcome to Beijing"标题的天坛风景图片, 图片的下方有"The Temple of Heaven"的图片说明。要求考生对Java_3.java进行完善并调试, 使程序的运行结果如下。
1.BeijingFrame 2.BorderLayout()3.icon
本题考查考生对窗口构件知识点的掌握
填空1:由主函数中的 BeijingFrame frame = new BeijingFrame(); 可以知道继承JFrame的类为BeijingFrame类
填空2 : setLayout是java图形界面编程的常用方法, 用来设置用户界面上的屏幕组件的格式布局, 默认为流式布局。
常用的有5种:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。
函数声明格式:public void setLayout(LayoutManager manager), 一般的用法:setLayout(new BorderLayout())
填空3 : JLabel 对象可以显示文本、图像或同时显示二者, 创建对象时, 在构造函数中输入要显示的对象, 本程序要显示的是天坛图片。
填空1:由主函数中的 BeijingFrame frame = new BeijingFrame(); 可以知道继承JFrame的类为BeijingFrame类
填空2 : setLayout是java图形界面编程的常用方法, 用来设置用户界面上的屏幕组件的格式布局, 默认为流式布局。
常用的有5种:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBagLayout。
函数声明格式:public void setLayout(LayoutManager manager), 一般的用法:setLayout(new BorderLayout())
填空3 : JLabel 对象可以显示文本、图像或同时显示二者, 创建对象时, 在构造函数中输入要显示的对象, 本程序要显示的是天坛图片。