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

选择题

公共知识

【1】下列叙述中正确的是()。
〖A〗栈是"先进先出"的线性表
〖B〗队列是"先进后出"的线性表
〖C〗循环队列是非线性结构
〖D〗有序线性表既可以采用顺序存储结构, 也可以采用链式存储结构
栈是先进后出的线性表, 所以A错误; 队列是先进先出的线性表, 所以B错误; 循环队列是线性结构的线性表, 所以C错误。
【2】支持子程序调用的数据结构是()。
〖A〗
〖B〗
〖C〗队列
〖D〗二叉树
栈支持子程序调用。
栈是一种只能在一端进行插入或删除的线性表, 在主程序调用子函数时要首先保存主程序当前的状态, 然后转去执行子程序, 最终把子程序的执行结果返回到主程序中调用子程序的位置, 继续向下执行, 这种调用符合栈的特点, 因此本题的答案为A。
【3】某二叉树有5个度为2的结点, 则该二叉树中的叶子结点数是()。
〖A〗10
〖B〗8
〖C〗6
〖D〗4
根据二叉树的基本性质3:在任意一棵二叉树中, 度为0的叶子节点总是比度为2的节点多一个, 所以本题中是5 + 1 = 6个。
【4】下列排序方法中, 最坏情况下比较次数最少的是()。
〖A〗冒泡排序
〖B〗简单选择排序
〖C〗直接插入排序
〖D〗堆排序
冒泡排序与简单插入排序与简单选择排序法在最坏情况下均需要比较n(n - 1) / 2次, 而堆排序在最坏情况下需要比较的次数是


【5】软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。
〖A〗编译程序
〖B〗操作系统
〖C〗教务管理系统
〖D〗汇编程序
编译软件、操作系统、汇编程序都属于系统软件, 只有C教务管理系统才是应用软件。
【6】下面叙述中错误的是()。
〖A〗软件测试的目的是发现错误并改正错误
〖B〗对被调试的程序进行"错误定位"是程序调试的必要步骤
〖C〗程序调试通常也称为Debug
〖D〗软件测试应严格执行测试计划, 排除测试的随意性
软件测试的目的是为了发现错误而执行程序的过程, 并不涉及改正错误, 所以选项A错误。
程序调试的基本步骤有:错误定位、修改设计和代码, 以排除错误、进行回归测试, 防止引进新的错误。
程序调试通常称为Debug, 即排错。
软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计划, 排除测试的随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善保存测试计划等文件。
【7】耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是()。
〖A〗提高耦合性降低内聚性有利于提高模块的独立性
〖B〗降低耦合性提高内聚性有利于提高模块的独立性
〖C〗耦合性是指一个模块内部各个元素间彼此结合的紧密程度
〖D〗内聚性是指模块间互相连接的紧密程度
模块独立性是指每个模块只完成系统要求的独立的子功能, 并且与其他模块的联系最少且接口简单。
一般较优秀的软件设计, 应尽量做到高内聚, 低耦合, 即减弱模块之间的耦合性和提高模块内的内聚性, 有利于提高模块的独立性, 所以A错误, B正确。
耦合性是模块间互相连接的紧密程度的度量而内聚性是指一个模块内部各个元素间彼此结合的紧密程度, 所以C与D错误。
【8】数据库应用系统中的核心问题是()。
〖A〗数据库设计
〖B〗数据库系统设计
〖C〗数据库维护
〖D〗数据库管理员培训
数据库应用系统中的核心问题是数据库的设计。
【9】有两个关系R, S如下:

由关系R通过运算得到关系S, 则所使用的运算为()。
〖A〗选择
〖B〗投影
〖C〗插入
〖D〗连接
投影运算是指对于关系内的域指定可引入新的运算。
本题中S是在原有关系R的内部进行的, 是由R中原有的那些域的列所组成的关系。
所以选择B。
【10】将E - R图转换为关系模式时, 实体和联系都可以表示为()。
〖A〗属性
〖B〗
〖C〗关系
〖D〗
从E - R图到关系模式的转换是比较直接的, 实体与联系都可以表示成关系, E - R图中属性也可以转换成关系的属性。

专业知识

【11】Java为移动设备提供的平台是()。
〖A〗J2ME
〖B〗J2SE
〖C〗J2EE
〖D〗JDK5.0
J2ME是一种高度优化的Java运行环境, 主要是针对消费类电子设备的, 例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等。
它将Java语言的与平台无关的特性移植到小型电子设备上, 允许移动无线设备之间共享应用程序。
因而J2ME是为嵌入式和移动设备提供的Java平台。
本题答案为A选项。
【12】Java语言使用的字符码集是()。
〖A〗ASCII
〖B〗GB2312
〖C〗Oak
〖D〗Unicode
Java语言使用的是Unicode字符集。
而ASCII是国际上使用最广泛的字符编码:汉字编码及国标码GB2312。
本题答案为D选项。
【13】下列方法名的定义中, 不符合Java命名约定的是()
I.showMessage()II.ShowMessage()III.showmessage()IV.$showMessage()
〖A〗I, II
〖B〗IV
〖C〗II, III, IV
〖D〗I, II, III, IV
java中方法的命名规范约定为遵循驼峰命名法:第一个单词首字母小写, 后面的每个首字母大写。
本题答案为C选项。
【14】下列选项中为单精度数的是()。
〖A〗023
〖B〗0.2f
〖C〗5.2
〖D〗15L
在java中有单精度float类型, 双精度为double类型。
默认的浮点类型为double类型, 要表示float类型, 需在数值后加上F或f。
本题答案为B选项。
【15】下列不属于位运算符的是()。
〖A〗&&
〖B〗>>
〖C〗>>>
〖D〗<<
java中, "&&"属于逻辑运算符, 选项B、C、D都属于位运算符。
本题答案为A选项。
【16】下列程序的运行结果是()
public class Test {
    public static void main(String[] args) {
        int x = 3;
        char y = 'g';
        String s = "abc";
        System.out.println(s + x + y);
    }
}
〖A〗abcg
〖B〗abcabcabcg
〖C〗abc3g
〖D〗3g
本题考查运算符"+"号在java中的应用。
运算符"+"号在java中除了做加法操作之外, 还有一个非常重要的作用就是字符串的拼接操作。
当"+"两边为基本数据类型时做加法操作。
任意一边为字符串类型时做拼接操作, 做拼接操作时数据类型自动转为字符串类型。
变量s为字符串类型, 变量x为整数类型, 变量y为char类型。
则表达s + x + y值位"abc3g"。
本题答案为C选项。
【17】下列程序的运行结果是()
public class Test {
    public static void main(String[] args) {
        int c = 5;
        System.out.print(c);
        System.out.print("  " + c++);
        System.out.println("  " + c);
    }
}
〖A〗5 6 6
〖B〗5 5 6
〖C〗6 7 7
〖D〗6 6 6
本题考查java运算符的使用; 运算符"+"在java中除了做加法操作之外, 还有一个非常重要的作用就是字符串拼接操作。
当"+"两边为基本数据类型时做加法操作, 任意一边为字符串类型时做拼接操作, 做拼接操作时数据类型自动转为字符串类型。
运算符"++"作后缀运算时, 先运算后自身加1。
本题中"c++", "++"在后缀运算, 先运算后, 自身再+1, 所以最终变量C的值为6。
程序输出"5 5 6", 本题答案为B选项。
【18】下列程序的运行结果是()
public class Test {
    public static void main(String[] args) {
        int x = 345;
        int a = x / 100;
        int b = x % 10;
        System.out.println(" " + (a + b));
    }
}
〖A〗7
〖B〗8
〖C〗12
〖D〗35
程序中, 表达式"345/100"值为3, 因为运算符两边的运算对象都是整数, 表达式的值也为整型。
表达式"345%10"的值为5, 这是取余操作。
那么"a+b"的值为8。
本题答案为B选项。
【19】下列语句中执行跳转功能的语句是
〖A〗for语句
〖B〗while语句
〖C〗continue语句
〖D〗switch语句
选项A、B都是循环语句; 选项C属于跳转语句, continue在java中的作用是跳过当次循环进行下一次循环; 选项D属于分支结构。
本题答案为C选项。
【20】下列选项中, 不能输出10个整数的是
〖A〗for (int i = 0; i < 10; i++) System.out.println(i);
〖B〗int i = 0; do { System.out.println(i); i++; } while (i < 10);
〖C〗int i = 0; while (i < 10) { System.out.println(i); i++; }
〖D〗int i = 0; while (i < 10) { i++; if (i < 10) continue; System.out.println(i); }
选项D中, continue作用为满足条件跳过当次循环, 进行下一次循环, 选项D只打印1次。
本题答案为D选项。
【21】下列方法中, 可以正确加入类SubX中且父类的方法不会被覆盖的是
class X {
    public int F(int a, int b) {
        int s;
        s = a + b;
        return s;
    }
}
class SubX extends X {
}
〖A〗int F(int a, int b) { }
〖B〗public void F() { }
〖C〗public int F(int a, int b)throws MyException { }
〖D〗public float F(int a, int b, float b = 1.0) { }
方法的重写一般要遵循以下几个规则:(1)重写存在于父类与子类之中。
(2)重写方法必须与被重写方法相同的方法名, 参数列表, 返回类型。
(3)重写方法的修饰符访问权限必须大于等于被重写方法修饰符访问权限。
(4)重写方法抛出的异常必须小于等于被重写方法抛出的异常。
选项A中, 子类方法的访问权限小于父类方法的访问权限, 子类程序会报错; 选项C中, 父类方法没有抛出异常, 子类方法抛出MyException, 子类程序会报错。
选项D中, 子类方法重载父类方法, 但是参数重名, 子类程序会报错。
选项B中, 子类方法重载了父类方法。
答案为B选项。
【22】为使下列代码正常运行, 应该在下划线处填入的选项是
abstract class Person {
    public Person(String n) {
        name = n;
    }
    public _____________ String getDescription();
    public String getName() {
        return name;
    }
    private String name;
}
〖A〗static
〖B〗private
〖C〗abstract
〖D〗final
本题考查抽象类和抽象方法。
抽象方法必须用abstract关键字修饰, 并且没有方法体。
本题答案为C选项。
【23】下列有关构造方法的描述中, 错误的是
〖A〗构造方法一定要有返回值
〖B〗一个类可以有多个构造方法
〖C〗构造方法和类有相同的名字
〖D〗构造方法总是和new一起使用
java中对构造方法的定义为:方法名必须与类名一致, 没有返回值且不用void表示; 构造方法在java中的作用就是方便对成员变量初始化; 在创建对象的时候会自动调用相关的构造方法。
本题答案为A选项。
【24】若希望类定义中的数据成员被该类所有的对象共享, 则需要用到的修饰符是
〖A〗protected
〖B〗public
〖C〗private
〖D〗static
如果一个成员变量使用了static关键字, 那么这个变量不再属于对象自己, 而是属于所在类, 多个对象共享同一份数据。
本题答案为D选项。
【25】下列关于面向对象的论述中, 正确的是
〖A〗面向对象仅适用于程序设计阶段
〖B〗面向对象是指以功能为中心, 分析、设计和实现应用程序的机制
〖C〗面向对象是指以对象为中心, 分析、设计和实现应用程序的机制
〖D〗面向对象是一种程序设计语言
所谓面向对象就是以对象为中心, 解析、设计和实现应用程序的机制。
本题答案为C选项。
【26】下列程序的运行结果是
public class Test {
    public static void main(String[] args) {
        int[] a = new int[10];
        int s = 0;
        for (int i = 0; i < 10; i++) {
            a[i] = i;
        }
        try {
            for (int i = 0; i < 10; i++) {
                s = s + a[i + 1] / a[i];
            }
            System.out.print(" No exception");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.print(" Exception 2");
        } catch (Exception e) {
            System.out.print(" Exception 1");
        }
    }
}
〖A〗Exception 1
〖B〗Exception 2
〖C〗Exception 2 No exception
〖D〗Exception 1 No exception
本题是将数字0 ~ 9存入到数组a。
第一轮循环, i = 0, a[i] = 0为除数, 程序报"java.lang.ArithmeticException: / by zero"异常。
Catch子句中, 并没有对该异常的处理, 类Exception是所有异常类的父类。
会执行Exception异常中的内容输出"Exception 1"。
本题答案为A选项。
【27】语句"Hello".equals("hello"); 的正确执行结果是
〖A〗true
〖B〗false
〖C〗0
〖D〗1
String 类中的equals()方法比较的是字符串内容是否相等, 字符串"Hello"和"hello"并不相等, 返回值为false。
本题答案为B选项。
【28】阅读下列代码
public class Jixiangwu {
    public static void main(String[] args) {
        String[] stars = { "贝贝", "晶晶", "欢欢", "迎迎", "妮妮" };
        System.out.println("你抽取的奥运吉祥物是" + "\"" + stars[(int) (stars.__________ * Math.random())] + "\"" + " !");
    }
}
为保证程序正确执行, 下划线处应填入的是
〖A〗long
〖B〗width
〖C〗wide
〖D〗length
Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值。
获取数组stars的长度与随机值相乘取整, 可以随机获得数组元素的下标值。
数组的长度为length属性。
本题答案为D选项。
【29】为使下列代码正常运行, 应该在下划线处填入的选项是
ObjectInputStream in = new ________________(new FileInputStream("employee.dat"));
Employee[] newStaff = (Employee[])in.readObject();
in.close();
〖A〗Reader
〖B〗InputStream
〖C〗ObjectInput
〖D〗ObjectInputStream
类ObjectOutputStream的构造方法为ObjectInputStream(InputStream in), 参数为一个输入流。
通过类ObjectInputStream实例化对象。
本题答案为D选项。
【30】在下列程序的下划线处, 应填入的正确选项是
import java.io.*;
public class WriteInt {
    public static void main(String[] a) {
        int[] myArray = { 10, 20, 30, 40 };
        try {
            DataOutputStream dos = new DataOutputStream(new FileOutputStream("ints.dat"));
            for (int i = 0; i < myarray.length; i++)
                > dos.writeInt(myArray[i]);
            dos.________________;
            System.out.println("Have written binary file ints.dat");
        } catch (IOException ioe) {
            System.out.println("IO Exception");
        }
    }
}
</myarray.length;
i++)>
〖A〗start()
〖B〗close()
〖C〗read()
〖D〗write()
流对象在使用时会占用系统资源, 不用时将流对象关闭应释放资源。
可以调用流对象的close()方法释放资源。
本题答案为B选项。
【31】Java类库中, 将数据写入内存的类是
〖A〗java.io.ByteArrayOutputStream
〖B〗java.io.FileOutputStream
〖C〗java.io.BufferedOutputStream
〖D〗toString(String charsetName)
java.io提供了ByteArrayOutputStream、ByteArrayInputStream和StringBufferInputStream类可直接访问内存。
用ByteArrayInputStream可以从字节数组读取数据; ByteArrayOutputStream可以向字节数组(缓冲区)写入数据, 这两个类对于在内存中读/写数据是十分有用的。
本题答案为A选项。
【32】用于设置组件大小的方法是
〖A〗paint()
〖B〗setSize()
〖C〗getSize()
〖D〗repaint()
在构件类的方法中, paint()方法是绘制构件; setSize()方法是设置组件大小; getSize()方法是获得组件大小; repaint()方法是重新绘制构件; 本题答案为B选项。
【33】阅读下列代码片段
class InterestTest _______________ ActionListener {
    ……
    public void actionPerformed(ActionEvent event) {
        double interest = balance * rate / 100;
        balance += interest;
        NumberFormat format = NumberFormat.getCurrencyInstance();
        System.out.printlb("balance = " + formatter.format(balance));
    }
    private double rate;
}
在下划线处, 应填入的选项是
〖A〗Implementation
〖B〗Inheritance
〖C〗implements
〖D〗extends
ActionListener属于监听器接口, 一个类要实现一个接口必须用关键字implements。
本题答案为C选项。
【34】对点击按钮操作所产生的事件进行处理的接口是
〖A〗MouseListener
〖B〗WindowListener
〖C〗ActionListener
〖D〗KeyListener
对点击按钮操作所产生的事件进行处理的接口是ActionListener。
本题答案为C选项。
【35】下列用于设置窗口标题的方法是
〖A〗setTitle()
〖B〗getSize()
〖C〗setForeground()
〖D〗setBackground()
getSize()方法获取窗口大小; setForeground()方法设置前景色; setBackground()设置背景色; setTitle()方法为设置窗口标题。
本题答案为A选项。
【36】Java中的线程模型由三部分组成, 与线程模型组成无关的是
〖A〗虚拟的CPU
〖B〗程序代码
〖C〗操作系统的内核状态
〖D〗数据
Java中的线程模型包含3部分:一个虚拟的CPU、该CPU执行的代码、代码所操作的数据。
本题答案为C选项。
【37】阅读下列程序
class Test implements Runnable {
    public static void main(String[] args) {
        Test t = new Test();
        t.start();
    }
    public void run() {
    }
}
下列叙述正确的是
〖A〗程序不能通过编译, 因为start()方法在Test类中没有定义
〖B〗程序编译通过, 但运行时出错, 提示start()方法没有定义
〖C〗程序不能通过编译, 因为run()方法没有定义方法体
〖D〗程序编译通过, 且运行正常
start()是Thread类的方法。
Test类实现了Runnable接口, Runnable接口中只定义了一个抽象方法run(), Test类不能调用start()方法。
编译时会出现start()方法未定义的错误。
本题答案为A选项。
【38】如果线程正处于运行状态, 则它可能到达的下一个状态是
〖A〗只有终止状态
〖B〗只有阻塞状态和终止状态
〖C〗其他所有状态
〖D〗可运行状态, 阻塞状态, 终止状态
如果线程正处于运行状态, 则它可能到达的下一个状态可以是可运行状态、阻塞状态、终止状态中的任一种。
本题答案为D选项。
【39】为了支持压栈线程与弹栈线程之间的交互与同步, 在程序的下划线处依次填入的语句是
public class IntStack {
    private int idx = 0;
    private int[] data = new int[8];
    public __________________ void push(int i) {
        data[idx] = i;
        idx++;
        __________________
    }
    … …
}
〖A〗synchronized(), notify()
〖B〗synchronized, this.wait()
〖C〗synchronized, this.notify()
〖D〗Serializable, sleep()
synchronized 线程锁, 进入这个关键字修饰的代码同一时间只能有一个线程执行, 线程可以同步同一个对象锁来调用 notify()方法, 这样将唤醒原来等待中的线程, 然后释放该锁。
本题先通过synchronized关键字同步push()方法, 在方法中调用notify()方法, 唤醒等待中的线程。
本题答案为C选项。
【40】在Applet的init()方法被调用后, 接下来最先被调用的方法是
〖A〗run()
〖B〗start()
〖C〗stop()
〖D〗destroy()
在Applet运行时, 首先调用init()方法, 初始化完成后。
调用start()方法时, Applet成为激活状态。
当Applet被覆盖时, 可用stop()方法停止线程。
关闭浏览器时调用destroy(), 彻底终止Applet, 从内存中卸载并释放该Applet的所有资源。
本题答案为B选项。

编程题

【41】在考生文件夹中存有文件名为Java_1.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
完善程序, 使程序输出结果如下:
多高兴啊 !
我是小龙
您好吗?
(1) main
(2) String
(3) this()
本题考查:类的main方法以及类的构造函数。
(1) Java中, 程序执行的入口方法为:public static void main(String args[]) { }, 空1处填写main, 空2处填写String。
(2) 程序要求先输出"多高兴啊!", 可知对象创建时, 调用父类的有参构造函数。
在父类的有参构造函数中执行this()调用父类的无参构造函数。
【42】在考生文件夹中存有文件名为Java_2.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
程序的功能是:类Java_2中定义了方法triple(), 该方法将传入的参数变成原来的3倍。程序中比较了方法调用前后及执行过程中参数值的变化情况。程序输出结果如下:

(1) double
(2) canshu
(3) triple
(4) x = 3 * x
(5) x
本题考查:函数的形参、实参和参数传递。
(1) 由题目输出结果显示为10.0, 可知变量canshu的数据类型为double类型。
(2) 程序结果输出:参数*3前, 参数值为:10.0; canshu = 10, 可知此处填写canshu变量。
(3) 程序中调用triple(canshu), 可知类中应包含triple()方法。
(4) 程序要求输出结果为:在triple方法内, 参数 10 变为30.0, 传入的参数变成原来的3倍。
(5) 最后将x输出。
【43】在考生文件夹中存有文件名为Java_3.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
按照程序所指定的字体名称、类型和大小, 在Applet窗口中显示"One World One Dream" 字符串。该程序输出结果如下:

(1)JApplet(2)init(3)contentPane
本题考查:java中Applet小程序。
(1) 本题考查Applet小程序, class类继承JApplet类。
(2) Applet小程序初始化时执行init()方法。
(3) Container中的add()提供将面板对象添加到窗口中去, 显示信息。
posted @ 2020-03-10 12:19  M了个J  阅读(781)  评论(0编辑  收藏  举报