【计算机二级Java语言】卷012

选择题

公共知识

【1】下列叙述中正确的是()。
〖A〗算法的效率只与问题的规模有关, 而与数据的存储结构无关
〖B〗算法的时间复杂度是指执行算法所需要的计算工作量
〖C〗数据的逻辑结构与存储结构是一一对应的
〖D〗算法的时间复杂度与空间复杂度一定相关
算法的效率与问题的规模和数据的存储结构都有关, A错误。
算法的时间复杂度, 是指执行算法所需要的计算工作量, B正确。
由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同, 因此数据的逻辑结构和存储结构不是一一对应的, C错误。
算法的时间复杂度和空间复杂度没有直接的联系, D错误。
【2】下列叙述中正确的是()。
〖A〗线性表链式存储结构的存储空间一般要少于顺序存储结构
〖B〗线性表链式存储结构与顺序存储结构的存储空间都是连续的
〖C〗线性表链式存储结构的存储空间可以是连续的, 也可以是不连续的
〖D〗以上说法均错误
线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的; (2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
用一组任意的存储单元来依次存放线性表的结点, 这组存储单元既可以是连续的, 也可以是不连续的, 甚至是零散分布在内存中的任意位置上的。
因此C正确。
【3】某二叉树共有12个结点, 其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)()。
〖A〗3
〖B〗6
〖C〗8
〖D〗12
二叉树中, 度为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的线性表作快速排序, 在最坏情况下, 比较次数为()。
〖A〗n
〖B〗n - 1
〖C〗n(n - 1)
〖D〗n(n - 1) / 2
快速排序最坏情况就是每次选的基准数都和其他数做过比较, 共需比较(n - 1) + (n - 2)+…+1 = n(n - 1) / 2, 选D。
【5】结构化程序设计中, 下面对goto语句使用描述正确的是()。
〖A〗禁止使用goto语句
〖B〗使用goto语句程序效率高
〖C〗应避免滥用goto语句
〖D〗以上说法均错误
结构化程序设计中, 要注意尽量避免goto语句的使用, 故选C。
【6】下面不属于软件测试实施步骤的是()。
〖A〗集成测试
〖B〗回归测试
〖C〗确认测试
〖D〗单元测试
软件测试主要包括单元测试、集成测试、确认测试和系统测试。
【7】下面不属于软件需求分析阶段主要工作的是()。
〖A〗需求变更申请
〖B〗需求分析
〖C〗需求评审
〖D〗需求获取
需求分析阶段的工作可概括为4个方面:①需求获取。
②需求分析。
③编写需求规格说明书。
④需求审评。
【8】一般情况下, 当对关系R和S进行自然连接时, 要求R和S含有一个或者多个共有的()。
〖A〗记录
〖B〗
〖C〗属性
〖D〗元组
自然连接是一种特殊的等值连接, 它满足下面的条件:①两关系间有公共域; ②通过公共域的等值进行连接, 选C。
【9】有三个关系R, S和T如下:

则由关系R和S得到关系T的操作是()。
〖A〗选择
〖B〗
〖C〗
〖D〗
关系T是关系R的一部分, 并且是关系R去掉R和S相同的元素, 符合差操作。
【10】有表示公司和职员及工作的三张表, 职员可在多家公司兼职。其中公司C(公司号, 公司名, 地址, 注册资本, 法人代表, 员工数), 职员S(职员号, 姓名, 性别, 年龄, 学历), 工作W(公司号, 职员号, 工资), 则表W的键(码)为()。
〖A〗公司号, 职员号
〖B〗职员号, 工资
〖C〗职员号
〖D〗公司号, 职员号, 工资
由于职员可以再多加公司兼职, 表W的键(码)应为公司关系和职员关系的主码, 即公司号和职员号。

专业知识

【11】下列关于package语句的说法中, 错误的是
〖A〗程序中可以包含1个package语句
〖B〗程序中至少要包含1个package语句
〖C〗若包含package语句, 则该语句必须是程序的第一条语句
〖D〗若程序中没有出现package语句, 则缺省的包为当前目录
在包下面建一个文件, package语句在第一行, 选项A正确; package语句有且只能有一个, 选项B错误; package语句必须在除注释外的第一行才可以通过编译, 选项C正确, 如果没有在包下建.class文件, eclipse会自动添加包名为当前的项目名; 选项D正确, 本题答案为B。
【12】Java编译器会将Java程序转换为一种代码, 该代码是
〖A〗字节码
〖B〗可执行代码
〖C〗机器代码
〖D〗不确定
Java编译器会将Java程序编译成.class结尾的字节码文件, 所以选项A正确; 字节码文件需要在虚拟机里面运行, 并不是可执行代码, 所以选项B错误; JVM会把.class转换成本地机器码进行运行, 所以C错误。
本题答案为A。
【13】下列变量名中不合法的是
〖A〗something
〖B〗shape_id
〖C〗test2012
〖D〗2letters
变量名可以由字母组成, 也可以由字母开头, 选项A正确; 变量名可以由下划线组成, 也可以由下划线开头, 选项B正确; 变量名可以是下划线, 字母, $, 数字组成, 选项C正确; 变量名不能由数字开头, 选项D错误。
本题答案为D。
【14】下列代码段执行后, k 的值为
int x = 3, y = 4;
int k = ++x * y++;
〖A〗12
〖B〗15
〖C〗16
〖D〗20
本题考查的是++i 和 i++的区别, ++i是i的值先加1, 然后再进行运算, 而i++是先将i 进行运算, 然后再自身加1, 本题第二行代码k = 4 * 4为16, 答案C正确。
计算完x的值为4, y的值为5。
本题答案为C。
【15】下列选项中的逻辑运算符是
〖A〗||
〖B〗?:
〖C〗>>
〖D〗>=
||是逻辑或, 所以选项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;
〖A〗3
〖B〗5
〖C〗8
〖D〗16
本题考查的是"="的用处, 在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);
〖A〗4
〖B〗18
〖C〗12
〖D〗25
本题考查的是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。
【18】下列选项中, 循环会无限执行的是
〖A〗for (int i = 1; i < 10; i++) System.out.print(" " + i);
〖B〗int i = 1; while (true) { System.out.print(" " + i); i++; if (i > 5) break; }
〖C〗int i = 1; while (i < 10) System.out.print(" " + i);
〖D〗for (int i = 10; i > 0; i--) System.out.print(" " + i);
本题考查的两种循环结构, for循环和while循环, 因为选项C里面i的值没有自增, 一直都是1, 一直都满足i < 10的条件。
所以会导致程序陷入死循环。
所以选项C正确。
本题答案为C。
【19】下列代码段执行后的结果是
int x = 5;
do {
    x *= 2;
    System.out.print(" " + x);
} while (x <= 5);
〖A〗5
〖B〗10
〖C〗5 10
〖D〗5 10 15
本题考查的是do while的结构, 该结构至少会执行一次循环体。
第一次打印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);
〖A〗0
〖B〗1
〖C〗2
〖D〗3
本题考查循环结构和"="的赋值作用, 第一次循环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。
【21】若数组a定义为 int[][] a = new int[3][4], 则a是
〖A〗一维数组
〖B〗二维数组
〖C〗三维数组
〖D〗四维数组
单行单列的数组是一维数组, 多行多列的数组为二维数组。
本题的数组是一个三行四列的二维数组, 所以选项B正确。
本题答案为B。
【22】关于下列代码的说法中, 正确的是
public class Animal {
    static int[] legs = new int[10];
    public static void main(String[] args) {
        System.out.println(legs[9]);
    }
}
〖A〗编译时将产生错误
〖B〗编译时正确, 运行时将产生错误
〖C〗输出0
〖D〗输出为空
本题考查数组中基本数据类型的默认值, 整数类型的默认值为0, 浮点类型的默认值为0.0, 字符类型的默认值为/u0000, 布尔类型的默认值为false, 所以选项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
}
〖A〗第2行
〖B〗第3行
〖C〗第6行
〖D〗第7行
本题考查的是子类继承父类中的成员方法(除了被private修饰的), 父类中方法重写了bark(); 根据参数类型, 调用的是只有一个参数的bark()方法, 所以执行第三行代码。
选项B正确。
本题答案为B。
【24】StringBuffer类对象的长度是
〖A〗固定的
〖B〗必须小于16个字符
〖C〗可变的
〖D〗必须大于16个字符
StringBuffer对象的每次修改都会改变对象自身, 且还是之前的对象, 在内存中的地址不变。
所以选项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");
    }
}
〖A〗18 0
〖B〗null
〖C〗integer
〖D〗String
〖E〗
本题考查的是构造方法的特点:1没有返回值, 且不能用void修饰, 2方法名和类名一致, 3不能直接调用, 而是在你new该类的对象的时候自动调用。
所以本题答案选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");
        }
    }
}
〖A〗In Situation0 no Exception caught In Situation1
〖B〗In Situation0 no Exception caught In Situation1 catch java.lang.ArrayIndexOutOfBoundsException : 4 in proc finally
〖C〗In Situation0 no Exception caught in proc finally
〖D〗In Situation0 no Exception caught In Situation1 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;
    }
}
〖A〗float is : 10.0 changed float is : 10.0 fact is : true changed fact is : false
〖B〗float is : 10.0 changed float is : 20.0 fact is : true changed fact is : false
〖C〗float is : 10.0 changed float is : 10.0 fact is : true changed fact is : true
〖D〗float is : 10.0 changed float is : 20.0 fact is : true changed fact is : true
本题考查全局变量与局部变量的作用范围问题, vp.changeFloat(f); 该方法里面的f是形式参数, 也是局部变量, 只能在该方法中起作用, 不会影响到方法外的全局变量的值。
所以第二次打印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);
    }
}
〖A〗Javalanguage
〖B〗Jbvalanguage
〖C〗Javalangubge
〖D〗Jbvblbngubge
本题考查的是String类的replace()方法, 将该字符串中所有的'a'用'b'来代替掉, 所以答案D正确。
本题答案为D。
【29】下列说法中正确的是
〖A〗java.io包中不存在兼有输入输出功能的类
〖B〗RandomAccessFile类可以在文件的任意位置读写一个记录
〖C〗RandomAccessFile类只实现了DataInput接口
〖D〗RandomAccessFile类只实现了DataOutput接口
RandomAccessFile是java.io包中的一个兼有输入输出功能的类, 所以A错误, RandomAccessFile既实现了DataInput接口, 又实现了DataOutput接口, 所以CD错误。
本题答案为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();
        }
    }
}
〖A〗writeOut
〖B〗output
〖C〗write
〖D〗writeObject
在API文档中, writeObject()方法是 将指定的对象写入 ObjectOutputStream, 所以本题选D。
选项A和B两个方法不存在。
本题答案为D。
【31】在随机文件流RandomAccessFile类中不能实现数据读取的方法是
〖A〗readInt
〖B〗readChar
〖C〗skipBytes
〖D〗readDouble
skipBytes()尝试跳过输入的 n 个字节以丢弃跳过的字节, 本题答案为C。
【32】下列能判断"score.dat"文件是否存在的语句是
〖A〗if (new File("score.txt").exists())
〖B〗if (File.exists("score.txt"))
〖C〗if (File.exists("score.txt") == 1)
〖D〗if (exists("score.txt") == 1)
本题考查File类的exists()方法, 通过该方法的返回值为布尔类型, 该方法是没有参数的且不是静态方法么不能通过类名直接调用, 所以BC错误, D是完全语法错误。
本题答案为A。
【33】JOptionPane类中的参数message的作用是
〖A〗定义作为此对话框的Component
〖B〗定义Message的样式
〖C〗定义显示的对话框类型
〖D〗定义对话框中所显示的描述消息
本题从字面意思解释就是信息的含义, 而message的作用是对对话框中的内容进行了一些描述。
本题答案为D。
【34】下列选项中不是事件处理过程中所涉及的对象是
〖A〗事件
〖B〗事件源
〖C〗事件处理者
〖D〗事件保护
事件保护是事件处理过程中的应用, 不属于该问题所涉及的对象。
本题答案为D。
【35】当鼠标拖动时, 产生的事件是
〖A〗ActionEvent
〖B〗ButtonEvent
〖C〗FocusEvent
〖D〗MouseEvent
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();
    }
}
〖A〗extends Thread, Test4()
〖B〗implements Runnable, Test4()
〖C〗extends Runnable, Thread(new Test4())
〖D〗implements Thread, Thread(new Test4())
创建线程的两种方法要么实现Runnable接口要么继承Thread类, 本题正常运行并且输出10以内的偶数, 根据t.start(); 是启动线程, 需要让Tes4类成为线程, 再根据main函数中的多态, 则Test4需要继承Thread类。
综合考虑答案A正确。
本题答案为A。
【37】要实现线程同步, 建议使用的方法是
〖A〗stop()
〖B〗suspend()
〖C〗start()
〖D〗wait()
在java.lang.object中, 实现线程通信有两个方法:wait()和notify(), 它们可以完成线程间同步。
其中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() {
        ……
    }
}
〖A〗public, private
〖B〗default, default
〖C〗public, public
〖D〗protected, private
public:访问控制符指明该类为公共类, 可被其他类访问或引用其成员变量和成员方法。
为了保证堆栈在并发操作中数据的正确性, 必须定义成公共变量。
选项C正确, 本题答案为C。
【39】下列关于Applet的叙述中, 正确的是
〖A〗Applet程序中不需要、也不能有main()方法
〖B〗Applet程序不需要编译
〖C〗Applet的主类要定义为Applet类或JApplet类的子类
〖D〗同一个页面中的Applet之间不能通信
Applet是Java与Web相结合而引入的重要的Java应用形式。
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);
    }
}
〖A〗JPanel
〖B〗JApplet
〖C〗applet
〖D〗Applet
含有Applet的网页的HTML文件代码中部带有这样一对标记, 当支持Java的网络浏览器遇到这对标记时, 就将下载相应的小应用程序代码并在本地计算机上执行该Applet。
本题答案为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()方法用于一个弹出的窗口, 可用于信息框, 提示框。
【42】在考生文件夹中存有文件名为Java_2.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
在主线程中创建一个线程, 该线程休眠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语句块里面出现的异常进行的处理。
【43】在考生文件夹中存有文件名为Java_3.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
显示一个带"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 对象可以显示文本、图像或同时显示二者, 创建对象时, 在构造函数中输入要显示的对象, 本程序要显示的是天坛图片。
posted @ 2020-03-10 14:52  M了个J  阅读(933)  评论(0编辑  收藏  举报