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

选择题

公共知识

【1】一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈, 然后再依次出栈, 则元素出栈的顺序是()。
〖A〗12345ABCDE
〖B〗EDCBA54321
〖C〗ABCDE12345
〖D〗54321EDCBA
栈按先进后出的原则组织数据, 所以入栈最早的最后出栈, 所以选择B。
【2】下列叙述中正确的是()。
〖A〗循环队列有队头和队尾两个指针, 因此, 循环队列是非线性结构
〖B〗在循环队列中, 只需要队头指针就能反映队列中元素的动态变化情况
〖C〗在循环队列中, 只需要队尾指针就能反映队列中元素的动态变化情况
〖D〗循环队列中元素的个数是由队头指针和队尾指针共同决定
循环队列有队头和队尾两个指针, 但是循环队列仍是线性结构的, 所以A错误; 在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况, 所以B与C错误。
【3】在长度为n的有序线性表中进行二分查找, 最坏情况下需要比较的次数是()。
〖A〗
〖B〗
〖C〗
〖D〗
当有序线性表为顺序存储时才能用二分法查找。
可以证明的是对于长度为n的有序线性表, 在最坏情况下, 二分法查找只需要比较

次, 而顺序查找需要比较n次。

【4】下列叙述中正确的是()。
〖A〗顺序存储结构的存储一定是连续的, 链式存储结构的存储空间不一定是连续的
〖B〗顺序存储结构只针对线性结构, 链式存储结构只针对非线性结构
〖C〗顺序存储结构能存储有序表, 链式存储结构不能存储有序表
〖D〗链式存储结构比顺序存储结构节省存储空间
链式存储结构既可以针对线性结构也可以针对非线性结构, 所以B与C错误。
链式存储结构中每个结点都由数据域与指针域两部分组成, 增加了存储空间, 所以D错误。
【5】数据流图中带有箭头的线段表示的是()。
〖A〗控制流
〖B〗事件驱动
〖C〗模块调用
〖D〗数据流
数据流图中带箭头的线段表示的是数据流, 即沿箭头方向传送数据的通道, 一般在旁边标注数据流名。
【6】在软件开发中, 需求分析阶段可以使用的工具是()。
〖A〗N - S图
〖B〗DFD图
〖C〗PAD图
〖D〗程序流程图
在需求分析阶段可以使用的工具有数据流图DFD图, 数据字典DD, 判定树与判定表, 所以选择B。
【7】在面向对象方法中, 不属于"对象"基本特点的是()。
〖A〗一致性
〖B〗分类性
〖C〗多态性
〖D〗标识唯一性
对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。
所以选择A。
【8】一间宿舍可住多个学生, 则实体宿舍和学生之间的联系是()。
〖A〗一对一
〖B〗一对多
〖C〗多对一
〖D〗多对多
因为一间宿舍可以住多个学生即多个学生住在一个宿舍中, 但一个学生只能住一间宿舍, 所以实体宿舍和学生之间是一对多的关系。
【9】在数据管理技术发展的三个阶段中, 数据共享最好的是()。
〖A〗人工管理阶段
〖B〗文件系统阶段
〖C〗数据库系统阶段
〖D〗三个阶段相同
数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。
其中最后一个阶段结构简单, 使用方便逻辑性强物理性少, 在各方面的表现都最好, 一直占据数据库领域的主导地位, 所以选择C。
【10】有三个关系R、S和T如下:

由关系R和S通过运算得到关系T, 则所使用的运算为()。
〖A〗笛卡尔积
〖B〗
〖C〗
〖D〗自然连接
自然连接是一种特殊的等值连接, 它要求两个关系中进行比较的分量必须是相同的属性组, 并且在结果中把重复的属性列去掉, 所以根据T关系中的有序组可知R与S进行的是自然连接操作。

专业知识

【11】下列对Java源程序结构的叙述中, 错误的是()。
〖A〗import语句必须在所有类定义之前
〖B〗接口定义允许0或多个
〖C〗一个文件中public class类定义允许0或多个
〖D〗package语句允许0或1个
java中一个文件只能允许1个public 类, 选项C正确, 本题答案为C选项。
【12】下列特点中不属于Java的是()。
〖A〗多线程
〖B〗多继承
〖C〗跨平台
〖D〗动态性
java的特点包含多线程, 跨平台, 动态性, 单继承等等, 只有接口可以多继承, 选项B正确, 本题答案为B选项。
【13】下列变量定义中, 不合法的是()。
〖A〗int $x;
〖B〗int _123;
〖C〗int #dim;
〖D〗int summer_2012_test;
java中标识符定义要满足命名规范, 只能由字母, 数字, $和下划线"_"组成, "#"不符合规范, 选项C正确, 本题答案为C选项。
【14】下列数中为八进制的是
〖A〗27
〖B〗0x25
〖C〗026
〖D〗028
八进制在数值前加上数字"0"表示, 十六进制在数值钱加上"0x"表示, 选项A, B错误, 选项C正确; 八进制数的数字范围从0到7, 选项D错误。
本题答案为C选项。
【15】若变量a是String类型的数据, 那么表达式 a + a 的类型是()。
〖A〗char
〖B〗String
〖C〗int
〖D〗long
在java中, 运算符"+"号除了做加法操作外, 还可以做字符串拼接操作。
当"+"号两边任意一边为String类型, 则做字符串拼接操作, 另外数据类型也会自动转为String类型。
本题中变量a为String类型, "+"号做拼接操作, 表达式a + a的类型为String类型。
本题答案为B选项。
【16】下列选项中属于Java运算符的是()。
〖A〗**
〖B〗add
〖C〗#
〖D〗+=
java中算术运算符包含"+、 -、 * 、/、 %"; 赋值运算符有"++、 --、-=、+="等, 其中"+="属于复合赋值运算符, 如:int i = 0; int sum = 0; sum = sum + i可以写成sum += i; 选项D正确, 本题答案为D选项。
【17】若有语句int a = 5, b = 5; 则下列表达式中, 结果为25的是()
〖A〗(++a) * (--b)
〖B〗(a++) * (b--)
〖C〗(a++) * (--b)
〖D〗(++a) * (b--)
本题考查前缀运算符"++"、后缀运算符"++"、前缀运算符"--"和后缀运算符"--"。
当"++"在前时, 在赋值前先自身+1再赋值; "++"在后时, 先赋值再自身+1; 选项A中, 表达式的值为6 * 4 = 24; 选项B中, 表达式的值为5 * 5 = 25; 选项C中, 表达式的值为5 * 4 = 20; 选项D中, 表达式值为6 * 5 = 30; 本题答案为B选项。
【18】下列程序的运行结果是()
public class Test {
    public static void main(String[] args) {
        String s = "Test";
        switch (s) {
            case "Java":
                System.out.print("Java");
                break;
            case "Language":
                System.out.print("Language");
                break;
            case "Test":
                System.out.print("Test");
                break;
        }
    }
}
〖A〗Java
〖B〗Language
〖C〗Test
〖D〗编译出错
在java中的开发工具包JDK1.7之前, switch语句不支持String类型数据。
当case值和key值匹配时, 程序会报错, 选项D正确, 本题答案为D选项。
【19】下列Java语句中, 可以作为无限循环语句的是()
〖A〗for (; ; ) { }
〖B〗for (int i = 0; i < 10000; i++) { }
〖C〗while (1) { }
〖D〗do { } while (false);
选择A中, for循环没有退出循环的条件, 可以无限循环下去; 选项B循环10000次; 选项C中, 数字1无法判断是否为true或false, 程序出错; 选项D中, 循环会执行1次循环; 本题答案为A选项。
【20】下列程序的功能是利用递归来求n !(n的阶乘), 为保证程序正确运行, 在下划线处应该填入的是()
class FactorialTest {
    static long Factorial(int n) {
        if (n == 1)
            return 1;
        else
            return n * Factorial(_________);
    }
    public static void main(String[] args) {
        int n = 5;
        System.out.println(n + "! = " + Factorial(n));
    }
}
〖A〗n - 1
〖B〗n - 2
〖C〗n
〖D〗n + 1
本题考查递归算法的应用。
阶乘代表着所有小于或等于n的整数的乘积。
每次递归运算都是n与n - 1相乘, 一直到n = 1时退出递归函数; 选项A正确, 本题答案为A选项。
【21】在一个类中可以定义多个名称相同, 但参数不同的方法。下列关于这种机制的名称正确的是()。
〖A〗重载
〖B〗覆盖
〖C〗改写
〖D〗继承
java中规定方法名相同, 参数列表和类型不同为方法的重载, 本题答案为A选项。
【22】下列代码中的内部类名是()
import java.awt.event.*;
import javax.swing.*;
class TalkingClock {
    public void start(int interval, final boolean beep) {
        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                ……
            }
        }
        Timer t = new Timer(interval, listener);
        t.start();
    }
}
〖A〗Timer
〖B〗ActionListener
〖C〗listener
〖D〗匿名
匿名内部类也就是没有名字的内部类, 正因为没有名字, 所以匿名内部类只能使用一次, 它通常用来简化代码编写。
使用匿名内部类有个前提条件:必须继承一个父类或实现一个接口, 本题符合匿名内部类的要求。
选项D正确, 本题答案为D选项。
【23】下列代码的运行结果是()
public class MyVal {
    public static void main(String[] args) {
        MyVal m = new MyVal();
        m.aMethod();
    }
    public void aMethod() {
        boolean[] b = new Boolean[5];
        System.out.println(b[0]);
    }
}
〖A〗1
〖B〗null
〖C〗0
〖D〗编译出错
在"aMethod( )"方法中, " boolean[ ] b = new Boolean [5];"通过此条语句定义数组时, 要求两边的类型名一致, 否则编译时会出错。
本题答案为D选项。
【24】类变量必须带有的修饰符是()。
〖A〗static
〖B〗final
〖C〗public
〖D〗volatile
类变量可以直接通过类名调用, 需用static修饰成静态变量, 本题答案为A选项。
【25】下列程序的运行结果是()
public class Test {
    public static void main(String[] args) {
        int[] array = { 2, 4, 6, 8, 10 };
        int size = 6;
        int result = -1;
        try {
            for (int i = 0; i < size && result == -1; i++)
                if (array[i] == 20)
                    result = i;
        } catch (ArithmeticException e) {
            System.out.println("Catch---1");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Catch---2");
        } catch (Exception e) {
            System.out.println("Catch---3");
        }
    }
}
〖A〗Catch-- - 1
〖B〗Catch-- - 2
〖C〗Catch-- - 3
〖D〗什么都不显示
数组array的长度为5, 下标为0 ~ 4。
在for循环中, 当i = 5时, arr[i]超过数组范围, 报"ArrayIndexOutOfBoundsException"下标越界异常。
程序会捕获此异常, 执行catch后的语句, 输出"Catch---2"。
本题答案为B选项。
【26】抛出异常应使用的子句是()。
〖A〗catch
〖B〗throw
〖C〗try
〖D〗finally
在java中处理异常有三种方式:(1)捕获并处理try …catch子句; (2)直接抛出不处理throw; (3)自定义异常三种方式。
本题答案为B选项。
【27】下列程序的功能是统计字符串中"array"的个数, 在程序的下划线处应填入的正确选项是()。
public class FindKeyWords {
    public static void main(String[] args) {
        String text = "An array is a data structure that stores a collection of" + "values of the same type.You access each individual value" + "through an integer index.For example,if a is an array" + "of integers,then a[i] is the ith integer in the array.";
        int arrayCount = 0;
        int index = -1;
        String arrayStr = "array";
        index = text.indexOf(arrayStr);
        while (index_________0) {
            ++arrayCount;
            index += arrayStr.length();
            index = text.indexOf(arrayStr, index);
        }
        System.out.println("The text contains " + arrayCount + " arrays");
    }
}
〖A〗<
〖B〗=
〖C〗>=
〖D〗<=
indexof()方法返回字符中indexof(string)中字串string在父串中首次出现的位置, 从0开始, 没有返回-1。
在while循环中, 变量index是字符串"arrayStr"在父串"text"中出现的位置, 如果不存在返回-1, 所以while循环的布尔表达式index >= 0。
本题答案为C选项。
【28】grid[9][5]描述的是()。
〖A〗九维数组
〖B〗五维数组
〖C〗二维数组
〖D〗一维数组
数组是几维数组与数组中元素的个数没有关系, 而只与定义数组时有几组方括号有关, 本题目中有两组方括号, 所以为二维数组。
java中二维数组定义语法为:数据类型[][]数组名=new数据类型[行数][列数]; 选项C正确, 本题答案为C。
【29】下列Java语句从指定网址读取html文件, 在下划线处应填上的选项是()
Reader in = new ____________(new URL(urlString).openStream());
〖A〗Reader
〖B〗DataOutputStream
〖C〗ByteArrayInputStream
〖D〗InputStreamReader
类InputStreamReader是Reader的子类, 可以通过子类对父类进行实例化。
本题答案为D选项。
【30】在java.io包的字节输入流中, 过滤器输入流的基类是()。
〖A〗ByteArrayInputStream
〖B〗FileInputStream
〖C〗PipeInputStream
〖D〗FilterInputStream
InputStream类是所有输入流的抽象基类, 过滤器中存在FileFilter接口, 提供相关方法对文件进行过滤; 过滤器输入流的基类为FilterInputStream类。
本题答案为D选项。
【31】阅读下列Java语句
ObjectOutputStream out = new ObjectOutputStream(new _____________("employee.dat"));
在下划线处, 应填的正确选项是()
〖A〗FileOutputStream
〖B〗OutputStream
〖C〗File
〖D〗FileWriter
类ObjectOutputStream是将一个对象写到一个流中。
其原型为public ObjectOutputStream(OutputStream out), 即参数为一个输出流。
显然, 在空白处新建了一个输出流的对象。
其后还有一个参数"employee.dat", 是一个文件名, 本题目的意思为将对象写入一个文件输出流。
public FileOutputStream(String name), 创建一个向具有指定名称的文件中写入数据的输出文件流。
本题答案为A选项。
【32】下列叙述中, 错误的是()
〖A〗所有的字节输入流都从InputStream类继承
〖B〗所有的字节输出流都从OutputStream类继承
〖C〗所有的字符输出流都从OutputStreamWriter类继承
〖D〗所有的字符输入流都从Reader类继承
本题考查Java中的I / O流。
java.io包中包括:处理字节流的抽象类InputStream和OutputStream, 处理字符流的抽象类Reader和Writer。
其中, 所有字节输入流都从InputStream类继承, 所有字节输出流都从OutputStream类继承。
所有字符输入流都从Reader类继承, 所有字符输出流都从Writer类继承。
而字符类输出流 OutputStreamWriter、PrintWriter、BufferedWriter都是抽象类Writer的子类。
故本题答案为C选项。
【33】点击按钮时, 产生的事件是()。
〖A〗KeyEvent
〖B〗ActionEvent
〖C〗WindowEvent
〖D〗MouseEvent
只要用户点击按钮, JButton对象就会创建一个ActionEvent对象, 然后调用listener.actionPerformed(event)传递事件对象。
本题答案为B选项。
【34】Swing与AWT相比新增的布局管理器是()。
〖A〗BoxLayout
〖B〗GridBagLayout
〖C〗GridLayout
〖D〗CardLayout
Swing除继续沿用了AWT中的FlowLayout、BorderLayout、CardLayout、GridLayout、GridBagLayout布局管理器外, 新增了一个BoxLayout布局管理器。
BoxLayout布局管理器按照自上而下(y轴)或者从左到右(x轴)的顺序布局依次加入构件。
本题答案为A选项。
【35】下列选项中, 不属于事件适配器类的是()。
〖A〗MouseAdapter
〖B〗KeyAdapter
〖C〗ComponentAdapter
〖D〗FrameAdapter
本题考查java.awt.event包中定义的适配器类。
该包中定义的适配器类包括以下几个:(1)ComponentAdapter, 构件适配器(2)ContainerAdapter, 容器适配器(3)FocusAdapter, 焦点适配器(4)MouseAdapter, 鼠标适配器(5)KeyAdapter, 键盘适配(6)MouseMotionAdapter, 鼠标运动适配器(7)WindowAdapter, 窗口适配器 。
选项D中的FrameAdapter不属于事件适配器类。
本题答案为D选项。
【36】下列叙述中, 正确的是()。
〖A〗线程与进程在概念上是不相关的
〖B〗一个线程可包含多个进程
〖C〗一个进程可包含多个线程
〖D〗Java中的线程没有优先级
进程与线程的关系:进程是程序的一次动态执行, 它对应了代码从加载到执行完毕的一个完整的过程。
作为执行蓝本的同一段程序, 可以被多次加载到系统的不同内存区域执行, 形成不同的线程, 而线程是比进程更小的单位。
由于每个线程都是一个独立执行自身程序, 因此一个包含多线程的进程也能实现多项任务的并发执行。
所以说一个进程可以包含多个线程。
本题答案为C选项。
【37】读下列程序
1 public class Try extends Thread {
    2 public static void main(String[] args) {
        3 Try t = new Try();
        4 t.start();
        5
    }
    6 7      public void run(int j) {
        8 int i = 0;
        9 while (i < 5) {
            10 System.out.println("祝你成功!");
            11 i++;
            12
        }
        13
    }
    14
}
该程序要求打印5行"祝你成功!", 必须改正程序中的某行代码, 程序才能完成。选择正确的修改是()
〖A〗将第1行的extends Thread 改为 implements Runnable
〖B〗将第3行的new Try()改为 new Thread()
〖C〗将第4行t.start()改为 start(t)
〖D〗将第7行的public void run(int j)改为 public void run()
类Try继承Thread类, 实现其中的run()抽象方法。
run()方法没有参数列表, 加上参数则属于方法的重载而不是重写, 而线程要求必须是重写run()方法, 所以选项D正确。
本题答案为D选项。
【38】如果线程正处于运行状态, 可使该线程进入阻塞状态的方法是()。
〖A〗yield()
〖B〗start()
〖C〗wait()
〖D〗notify()
如果发生下面几种情况时, 处于运行状态的线程就进入阻塞状态:(1)线程调用了sleep()方法、join()方法和wait()方法时, 该线程就进入阻塞状态; (2)如果线程中使用synchronized来请求对象的锁未获得时, 也会进入阻塞状态; (3)如果线程中有输入/输出操作, 则线程也会进入阻塞状态。
待输入/输出操作结束后, 线程进入可运行状态。
本题答案为C选项。
【39】阅读下列实现堆栈类并发控制的部分代码
public class DataStack {
    private int idx = 0;
    private int[] data = new int[8];
    public void push(int i) {
        ________________ {
            data[idx] = i;
            idx++;
        }
    }
    … …
}
在程序下划线处应填入的正确选项是()。
〖A〗synchronized
〖B〗synchronized(this)
〖C〗synchronized()
〖D〗synchronized(idx)
在Java中, 使用synchronized关键字标识临界区。
Java平台将每个由synchronized语句设置的对象设置一个锁, 称为对象锁, 它是一种独占的排他锁。
即同一时刻最多只能有一个线程获取该锁。
为了能够正常地使用对象锁, 对共享数据的所有访问都必须在临界区内, 同时临界区的共享数据必须是私有的, 确保只能通过对象的方法才能访问到。
本程序中, 下画线后边的代码即为临界区, 所以需要用synchronized关键字标识。
本题答案为B选项。
【40】下列叙述中, 错误的是()
〖A〗Java Applet程序的.class文件可用java命令运行
〖B〗通常情况下Java Application只能有一个main()方法
〖C〗Java Applet必须有HTML文件才能运行
〖D〗Java Application与Applet所用编译命令相同
本题考查的是Java中的Applet以及Applet与Application的区别。
Applet的运行方式和Java Application虽然不同, 但是Applet在运行前也必须被编译为类文件, 这点和Application是一样的。
都用javac进行编译。
选项D的说法是正确的。
在每个应用程序Application中可以包含多个方法, 但只有一个main()方法为入口点执行, 必须有且只能有一个main方法。
故选项B的说法是正确的。
Applet是能够嵌入HTML语言中, 并能够在浏览器中运行的类。
Applet的运行环境是Web浏览器, 所以必须建立HTML文件, 告诉浏览器如何加载与运行Applet。
选项C的说法是正确的。
Applet不能直接通过Java命令行启动运行的。
因此, 选项A错误, 本题答案为A选项。

编程题

【41】在考生文件夹中存有文件名为Java_1.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
完善该程序并进行调试, 使程序先显示一个输入窗口如下:

输入10个学生考试结果后, 显示分析结果示例如下:

(1) input
(2) showMessageDialog
(2) exit
本题考查考while循环以及JOptionPane类的相关方法。
(1) 在窗口中输入的数值属于字符串类型, 参与算术运算的时候需要转为整数类型。
Integer类提供parseInt(String str)方法, 将字符串转为整数类型, 这里输入input。
(2) 程序要求要将获取结果显示在窗口中, JOptionPane提供了showMessageDialog()方法将显示具有"确定"按钮的窗口。
(3) 点击"确定"按钮, 程序退出, 系统提供了exit(int state)方法用于终止jvm运行。
【42】在考生文件夹中存有文件名为Java_2.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
对于给定的3位学生的Java成绩进行降序排序。程序输出结果如下:
Java 成绩降序排序的结果是:
name=王晓, fenshu = 98.0
name=李明, fenshu = 80.0
name=赵冬, fenshu = 75.0
(1) java
(2) getName()
(3) implements
(4) double
本题考查:数组对象, 类的Comparable接口。
(1) Arrays.sort()方法是对数组进行排序, 所以这里填写数组的引用"java"。
(2) 通过Student类, 可得知getName()方法时获取学生的名字, 填写getName()。
(3) 因为Student类重写了Comparable接口里面的CompareTo()方法, 这里填写implements实现Comparable接口。
(4) 分数的数据类型类为double, 所以定义变量时应为double类型。
【43】在考生文件夹中存有文件名为Java_3.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
从C:盘根目录下寻找一个不存在的文本文件abc.txt。该程序输出结果如下:
C:\abc.txt(系统找不到指定的文件。)请确认文件路径及文件名是否正确 !
(1)try(2)catch (3)ex
本题考查:FileInputStream类读写文件以及try…catch语句捕获异常。
(1) 因为本题需要用流来读取本地的文件, 读取文件时可能文件不存在会报相关异常, 所以要对相应的代码块进行异常处理, 利用try catch代码块。
所以该空填try。
(2) 这里填写catch, 对可能捕获到的异常进行处理。
(3) getMassage()方法是用来获取异常的详细信息, 必须由异常的对象引用来调用该方法, 所以该空填写异常的引用 ex。
posted @ 2020-03-10 12:17  M了个J  阅读(970)  评论(0编辑  收藏  举报