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

选择题

公共知识

【1】设数据结构B = (D, R), 其中
D = { a, b, c, d, e, f }
R = { (f, A), (d, B), (e, D), (c, e), (a, C) }
该数据结构为()。
〖A〗线性结构
〖B〗循环队列
〖C〗循环链表
〖D〗非线性结构
数据的逻辑结构有两个要素:一是数据元素的集合, 通常记为D; 二是D上的关系, 它反映了D中各数据元素之间的前后件关系, 通常记为R。
即一个数据结构可以表示成B = (D, R)。
其中B表示数据结构。
为了反映D中各数据元素之间的前后件关系, 一般用二元组来表示。
例如, 假设a与b是D中的两个数据, 则二元组(a, b)表示a是b的前件, b是a的后件。
如果一个非空的数据结构满足下列两个条件:①有且只有一个根结点; ②每一个结点最多有一个前件, 也最多有一个后件。
则称该数据结构为线性结构。
如果一个数据结构不是线性结构, 则称之为非线性结构。
根据上述理论, 本题中f为根结点, 每个结点有一个前件和一个后件, 符合线性结构的定义。
故本题答案为A选项。
【2】下列叙述中错误的是()。
〖A〗循环队列空的条件是队头指针与队尾指针相同
〖B〗若二叉树没有叶子结点, 则为空二叉树
〖C〗带链栈的栈底指针是随栈的操作而动态变化的
〖D〗非线性结构
在循环队列中, 当front = rear时, 不能确定是队列满还是队列空。
在实际使用循环队列时, 为了能区分队列满还是队列空, 通常还需要增加一个标志s。
当s = 0时表示队列空, 当s = 1且front = rear时表示队列满。
故本题答案为A选项。
【3】某带链栈的初始状态为 top = bottom = NULL, 经过一系列正常的入栈与退栈操作后, top = bottom = 20。该栈中的元素个数为()。
〖A〗1
〖B〗0
〖C〗20
〖D〗不确定
带链的栈是具有栈属性的链表。
线性链表的存储单元是不连续的, 为把存储空间中一些离散的空闲存储结点利用起来, 把所有空闲的结点组织成一个带链的栈, 称为可利用栈。
线性链表执行删除操作运算时, 被删除的结点可以"回收"到可利用栈, 对应于可利用栈的入栈运算, 线性链表执行插入运算时, 需要一个新的结点, 可以在可利用栈中取栈顶结点, 对应于可利用栈的退栈运算。
可利用栈的入栈运算和退栈运算只需要改动top指针即可。
当top = bottom = 20时链栈中的元素个数为1。
故本题答案为A选项。
【4】设一棵度为3的树, 其中度为2, 1, 0的结点数分别为3, 1, 6。该树中度为3的结点数为()。
〖A〗1
〖B〗2
〖C〗3
〖D〗不可能有这样的树
根据题目有6个度为0的结点: 1个度为1的结点: 3个度为2的结点:因此最后度为3的结点有1个:故本题答案为A选项。
【5】下面描述错误的是()。
〖A〗模块的独立性与模块的信息隐蔽和局部化无关
〖B〗内聚性和耦合性是模块独立程度的定性度量标准
〖C〗一个模块的内聚性越高则该模块的独立性越强
〖D〗一个模块的耦合性越高则该模块的独立性越弱
模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。
模块的独立性是指软件模块的编写和修改应使其具有独立功能, 且与其他模块的关联尽可能少。
故本题答案为A选项。
【6】下面属于黑盒测试方法的是()。
〖A〗错误推测法
〖B〗基本路径测试
〖C〗判定覆盖
〖D〗条件覆盖
黑盒测试方法也称为功能测试或数据驱动测试。
黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。
黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。
白盒测试方法主要有逻辑覆盖测试(语句覆盖、路径覆盖、判断覆盖、条件覆盖)、基本路径测试等。
故本题答案为A选项。
【7】下面模型中为概念模型的是()。
〖A〗实体-联系模型
〖B〗层次模型
〖C〗关系模型
〖D〗网状模型
数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型。
概念数据模型有实体联系模型(E - R模型)、面向对象模型及谓词模型; 逻辑数据模型有层次模型、网状模型、关系模型和面向对象模型。
故本题答案为A选项。
【8】学生关系模式中有D(D#, Dn, Dl, DAddr)(其属性分别为系编号、系名称、系主任和系地址)和S(S#, Sn, SG, Date, Maj, D#)(其属性分别为学号、姓名、性别、入学日期、专业和系编号)两个关系, 关系S的主键(码)是S#, 关系S的外键(码)是()。
〖A〗D#
〖B〗Maj
〖C〗Dl
〖D〗Dn
在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。
表A中的某属性集是某表B的键, 则称该属性集为A的外键或外码。
故本题答案为A选项。
【9】关系的实体完整性要求关系中不能为空的属性是()。
〖A〗主键属性
〖B〗外键属性
〖C〗全部属性
〖D〗候选键属性
关系模型中可以有3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。
实体完整性约束是指若属性M是关系的主键, 则属性M中的属性值不能为空值。
故本题答案为A选项。
【10】学生选修课程的关系模式为SC(S#, Sn, Sd, Sa, C#, G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩); C(C#, Cn, P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是()。
〖A〗S#→Sd
〖B〗(S#, C#)→G
〖C〗C#→Cn
〖D〗C#→P#
若X→Y, 但Y不完全依赖于X, 则称Y对X部分函数依赖。
关系模式SC中, 主键为(S#, C#), 但显然有S#->Sd, S#->Sa, 存在非主属性对主属性的部分依赖。
故本题答案为A选项。

专业知识

【11】下列关于import语句的说法中, 错误的是
〖A〗程序中可以包含多个import语句
〖B〗import语句必须写在所有类的定义之前
〖C〗所有程序都至少需要一个import语句
〖D〗import语句用于引入程序要使用的Java类
Java程序中使用import语句导入一个包中的类。
在一个Java源程序中可以有0条或多条import语句, 但必须在所有类定义之前引入标准类。
选项C正确, 本题答案为C。
【12】下列标识符符合Java命名约定的是
〖A〗public int Get( )
〖B〗double $d
〖C〗char str
〖D〗class test
标识符可以由字母、数字、下画线"-"和美元符"$"组成, 但数字不能开头, 不能用关键字作标识符。
类名和接口名都采用完整的英文描述符, 并且所有单词的第一个字母大写; 变量和方法名采用完整的英文描述符, 第一个字母小写, 任何中间的单词首字母大写; 包采用完整的英文描述符, 且都是由小写字母组成。
(参见Java编程规范), 选项C正确, 本题答案为C。
【13】执行下列语句后, k的值为
int x = 4, y = 5;
int k = --x * y++;
〖A〗20
〖B〗24
〖C〗15
〖D〗18
本题考查++, --在前和在后的运算规则, 在前要先自身+1或-1然后再参与运算, 在后先参与运算再自身+1或-1, 本题结果是3 * 5 = 15, 选项C正确, 本题答案为C。
【14】下列代码段执行后的结果是
char k = 'B', p = 'F';
int data = p - k;
System.out.println("" + data);
〖A〗0
〖B〗A
〖C〗F
〖D〗4
字符在参与运算时会转换成对应的10进制数参与运算, B对应的10进制数是66, F对应的10进制数是70, 选项D正确, 本题答案为D。
【15】经常与switch语句一起使用的语句是
〖A〗break
〖B〗continue
〖C〗stop
〖D〗if
break语句可以根据需要, 使用在循环体和switch语句体内, 选项A正确, 本题答案为A。
【16】下列代码段执行后, x的值为
int x = 5;
if (x > 1 && x < 5)
    x += 2;
else if (x > 10 || x < 20)
    x -= 2;
else
    x *= 2;
〖A〗7
〖B〗5
〖C〗10
〖D〗3
X = 5不满足if条件中的布尔表达式, 满足else if中的表达式, 执行语句3块, 选项D正确, 本题答案为D。
【17】下列代码段执行后, y的值为
int d, y = 0;
int x = 123;
while (x != 0) {
    d = x % 10;
    y = y * 10 + d;
    x = x / 10;
}
〖A〗221
〖B〗321
〖C〗21
〖D〗23
%在java中做取余操作, /在java中做取整操作

第一次:3 3 12

第二次:2 32 1

第三次:1 321 0

选项B正确, 本题答案为B。

【18】下列代码段执行后, result的值为
long result = 0;
for (int i = 1; i < 5; i++)
    result = result + i * (i + 1);
〖A〗15
〖B〗24
〖C〗40
〖D〗70
第一次循环结果:0 + 2 第二次循环结果:2 + 6 第三次循环结果:8 + 12

第四次循环结果:20 + 20 选项C正确, 本题答案为C。

【19】下列代码段执行后的结果是
int i, j;
for (i = 1; i < 3; i++) {
    for (j = 10; j >= 0; j--)
        if ((j % 3) == 0)
            break;
    System.out.print("" + i + "," + j + ",");
}
I = 1;
j = 10 2 9
〖A〗1, 10,
〖B〗1, 2
〖C〗1, 10, 2, 10,
〖D〗1, 9, 2, 9,
里层for循环缺少大括号, break默认跳出离它最近的循环体, 本程序直接跳出第一层循环, 选项D正确, 本题答案为D。
【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(" " + num[k]);
〖A〗2
〖B〗3
〖C〗5
〖D〗8
循环第二次执行if中的语句块, k = 1, num[1] = 8, 选项D正确, 本题答案为D。
【21】类变量必须带有的修饰符是
〖A〗static
〖B〗final
〖C〗public
〖D〗volatile
在java类变量用static修饰会成为静态变量, 可以直接通过类名去调用, 不需new对象。
选项A正确, 本题答案为A。
【22】关于下列代码的说法中, 正确的是
public class BankAccount {
    static double loan[] = new double[10];
    public static void main(String args[]) {
        System.out.println(loan[9]);
    }
}
〖A〗编译时将产生错误
〖B〗编译时正确, 运行时将产生错误
〖C〗输出0.0
〖D〗输出为空
数组在java中具有默认值, double类型默认值为0.0。
输出的是0.0选项C正确, 本题答案为C。
【23】下列代码的第10行语句运行时, 将执行的语句是
1 class Reptile {
    2 public void crawl(int i, int j) {
        ...
    }
    3 public void crawl(int i) {
        ...
    }
    4
}
5 public class Tortoise extends Reptile {
    6 public void crawl() {
        ...
    }
    7 public void crawl(int i) {
        ...
    }
    8 public static void main(String args[]) {
        9 Reptile a = new Tortoise();
        10 a.crawl();
        11
    }
    12
}
〖A〗第2行
〖B〗第3行
〖C〗第6行
〖D〗第10行
父类的引用指向子类的对象, 向上造型, 体现多态(重写与重载), 编译期看父类, 运行期看子类, 子类的方法要应对父类的方法。
本题答案为D。
【24】下列代码中构造方法的返回类型是
public class Village {
    public static void main(String args[]) {
        Village c = new Village();
    }
    Village() {
        System.out.println("hiding in Village");
    }
}
〖A〗null
〖B〗integer
〖C〗String
〖D〗
java中的构造方法是用来初始化一个对象的, 并为为实例变量赋予合适的初始值。
因此构造方法不需要返回类型。
选项D正确, 本题答案为D。
【25】如果要抛出异常, 应该采用的子句是
〖A〗catch
〖B〗throw
〖C〗try
〖D〗finally
当程序中需要抛出异常时, 应该使用throw子句, try catch语句是捕获并处理异常, finally代码块无论如何都会执行里面的代码块, 选项B正确, 本题答案为B。
【26】下列代码的运行结果是
public class ExceptionsHandling {
    static void test(int i) throws ArithmeticException, ArrayIndexOutOfBoundsException {
        if (i == 0) {
            System.out.println("Everything is OK");
            return ;
        } else if (i == 1) {
            int myArray[] = new int[4];
            myArray[4] = 3;
        }
    }
    public static void main(String args[]) {
        try {
            test(0);
            test(1);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("catch " + e);
        } finally {
            System.out.println("test over");
        }
    }
}
〖A〗Everything is OK
〖B〗Everything is OK catch java.lang.ArrayIndexOutOfBoundsException : 4 test over
〖C〗test over
〖D〗Everything is OK test over
test(0)执行if语句块里面的内容, 输出Everything is OK, test(1)数组下标越界, 通过throws抛出了, finally代码块里面的内容无论如何都会执行, 选项B正确, 本题答案为B。
【27】下列代码的运行结果是
public class ValueChange {
    char c;
    public static void main(String args[]) {
        long l;
        ValueChange vc = new ValueChange();
        l = 50;
        System.out.println("long is:" + l);
        vc.changelong(l);
        System.out.println("changed long is:" + l);
        vc.c = 'J';
        System.out.println("char is:" + vc.c);
        vc.changeName(vc);
        System.out.println("changed char is:" + vc.c);
    }
    public void changelong(long l) {
        l = 60;
    }
    public void changeName(ValueChange vc) {
        vc.c = 'X';
    }
}
〖A〗long is : 50 changed long is : 60 char is : J changed char is : X
〖B〗long is : 50 changed long is : 50 char is : J changed char is : X
〖C〗long is : 50 changed long is : 50 char is : J changed char is : J
〖D〗long is : 50 changed long is : 60 char is : J changed char is : J
public void changelong(long l) { l = 60; } 此时的l值仍然是50, 60没有覆盖l值。

public void changeName(ValueChange vc) {
vc.c = 'X';
}
vc.c已经重新辅助为X, 选项B正确, 本题答案为B。

【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.substring(5, 10);
        String s2 = s1.toUpperCase();
        System.out.println(s2);
    }
}
〖A〗LANGUAGE
〖B〗JAVALANGUAGE
〖C〗JAVA
〖D〗ANGUA
substring()方法用于提取字符串中介于两个指定下标之间的字符, toUpperCase()将所有的字母全部转为大写, 选项D正确, 本题答案为D。
【29】在File类中, 能返回字符串形式的文件路径名的方法是
〖A〗getPath
〖B〗getParent
〖C〗getParentFile
〖D〗getName
getParent()方法返回的父级路径字符串, 如果此抽象路径名的父或如果此路径名没有指定父目录则为null。
getParentFile()的作用是获得父目录

getName()是用来返对象所代表的具体对象的名称。

选项A正确, 本题答案为A。

【30】下列代码实现了以对象流方式从score.txt文件读出数据的功能。下划线处应填入的代码是
import java.io.*;
public class testIn {
    public static void main(String[] args) {
        try {
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("score.txt"));
            int[] pdata = new int[3];
            pdata = (int[])in._________();
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
〖A〗in
〖B〗inObject
〖C〗readObject
〖D〗read
虚拟机会试图调用对象类里的readObject(), 读出byte, 选择C正确, 本题答案为C。
【31】下列选项中不是DeflaterOutput子类的选项是
〖A〗GZipOutputStream
〖B〗ZipOutputStream
〖C〗JarOutputStream
〖D〗RarOutputStream
Deflater 是用于压缩数据包的, 当数据包比较大的时候, 采用压缩后的数据, 可以减少带宽的占用, 加多传送的速度, GZipOutputStream ZipOutputStream JarOutputStream, 都属于压缩包类型, 选项D不满足条件, 本题答案为D。
【32】下列说法中错误的是
〖A〗对象串行化时要使用Serializable接口
〖B〗对象串行化时会将类的静态变量一同串行化
〖C〗串行化对象可以把一个对象转换成字节流
〖D〗串行化对象可以把字节流反串行化为原始对象的拷贝
1、该对象的类必须实现Serializable接口。

2、该对象的串行化成员必须是非静态成员变量, 即不能保存任何的成员方法和静态的成员变量, 而且串行化保存的只是变量的值, 对于变量的任何修饰符, 都不能保存。
而对于某些类型的对象, 其状态是瞬时的, 这样的对象是无法保存其状态的, 例如一个Thread对象, 或一个FileInputStream对象, 对于这些字段, 我们必须用transient关键字标明 。
(注:保存任何的成员方法和静态的成员变量没有任何的意义, 因为对象的类已经完整的保存了他们)3、要串行化一个对象, 必须与一定的对象输入/输出流联系起来, 通过对象输出流将对象状态保存下来, 再通过对象输入流将对象状态恢复。

选项B正确, 本题答案为B。

【33】JOptionPane类中参数optionType的值不可能是
〖A〗WARNING_OPTION
〖B〗DEFAULT_OPTION
〖C〗YES_NO_OPTION
〖D〗OK_CANCEL_OPTION
static int DEFAULT_OPTION
      用于 showConfirmDialog 的类型。<br> 

static int YES_NO_OPTION

      用于 showConfirmDialog 的类型。<br>  

static int OK_CANCEL_OPTION

      用于 showConfirmDialog 的类型。<br>  

选项A正确, 本题答案为A。

【34】JFrame的缺省布局管理器是
〖A〗FlowLayout
〖B〗BorderLayout
〖C〗GridLayout
〖D〗CardLayout
JFrame 缺省布局使用的是边界布局管理器(BorderLayout).边界布局管理器(BorderLayout)是将容器控件划分为上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST)、中间(CENTER)五个位置, 使用此局布的时候可以将控件分别放置在这五个位置上进行显示.选项B正确, 本题答案为B。
【35】当按钮被按下时, 应执行的方法是
〖A〗void actionPerformed(ActionEvent e)
〖B〗void actionevent(actionPerformed e)
〖C〗void actionListener(ActionEvent e)
〖D〗void actionPerformed(ActionListener e)
这是 ActionListener 中定义的方法, java 的事件监听器的一个, 例如点击按钮、文本框里按下回车, 就会调用这个里面的方法。
选项A正确, 本题答案为A。
【36】为了使下列程序正常运行并且输出字符串abc, 在下划线处应填入的是
public class Test implements Runnable {
    public static void main(String[] args) {
        Thread t = new___________;
        t.start();
    }
    public void run() {
        System.out.println("abc");
    }
}
〖A〗Thread(this)
〖B〗Runnable()
〖C〗Thread(new Test())
〖D〗Test()
本题创建线程的方式是实心Runnable接口, 但最终启动线程还是Thread类中的start(), 选项C正确, 本题答案为C。
【37】如果线程正处于阻塞状态, 不能够使线程直接进入可运行状态的是
〖A〗sleep()方法的时间到
〖B〗获得了对象的锁
〖C〗被notify()方法唤醒
〖D〗线程在调用t.join()方法后, 线程t结束
notify 仅仅通知一个线程, 并且我们不知道哪个线程会收到通知, 选项C正确, 本题答案为C。
【38】在下列Counter类的定义中, 由于某些代码定义不当, 使得对计数器counter的并发控制无法实现, 有问题的代码是
1 public class Counter {
    2 public int counter = 0;
    3 synchronized void add() {
        4 counter++;
        5
    }
    6 public int get() {
        7 counter--;
        8 return counter;
        9
    }
    10
}
〖A〗第6行
〖B〗第2行和第6行
〖C〗第2行
〖D〗第3行
要想对计数器并发实现, 必须将counter变量定义为静态变量, 需用static修饰, 方法也应是静态方法, 所以第2行和第6行出现异常, 选项B正确, 本题答案为B。
【39】每个Applet程序必须定义为
〖A〗Applet类或JApplet类的子类
〖B〗JPanel类的子类
〖C〗JFrame的子类
〖D〗Window的子类
Applet类定义了小应用程序(Applet)与其运行环境之间的一个接口; JApplet是Applet类的扩展, 它继承了Applet的方法和执行机制, 同时也增加了对Swing构件的支持。
每个Java小应用程序都必须是Applet类或JApplet类的子类。
因此, 本题的正确答案是A。
【40】下列程序定义了一个Applet, 为了使程序运行时在浏览器中显示字符串"Good Luck!", 在下划线处应填入的是
import java.awt.*;
import java.applet.*;
public class SaySomething extends Applet {
    public void ________(Graphics g) {
        g.drawString("Good Luck!", 40, 40);
    }
}
〖A〗init
〖B〗start
〖C〗paint
〖D〗update
Graphics类提供基本绘图方法, 使用paint, 本题答案为C。

编程题

【41】在考生文件夹中存有文件名为Java_1.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
对该程序进行调试, 使程序能够判断所输入的年份是否闰年。
1.io 2.throws 3.in 4.s
本题考查的是考生通过流读取的年份判断是否是闰年的应用
填空1:所有的字节流字符流都属于输入流和输出流
填空2 : throw语句用在方法体内, 表示抛出异常, 由方法体内的语句处理。
throws语句用在方法声明后面, 表示再抛出异常, 由该方法的调用者来处理。
throws主要是声明这个方法会抛出这种类型的异常, 使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作, 所以它是抛出一个异常实例。
填空3 : readLine()是读取流读数据的时候用的, 当读到换行标记'\n'、'\r'(回车)时, 会跟着换行, 同时会以字符串形式返回这一行的数据, 当读取完所有的数据时会返回null
填空4:将字符串类型转为int类型
【42】在考生文件夹中存有文件名为Java_2.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
构造一个5行5列的矩阵并将其打印输出, 使程序的输出结果如下:
1 2 3 4 5
6 7 8 9 0
1 2 3 0 0
4 5 0 0 0
6 0 0 0 0
1.new 2.k++3.a[i][j] = 0 4.System.out.print("\n");
本题考查考生对二维数组的应用掌握
填空1:创建数组对象用关键字new
填空2:本程序中列的数字要求每列增加1, 用k++满足该条件
填空3:程序运行时要求每行的0都要增加1个, 可以用a[i][j] = 0来控制0的生成
填空4:输出要求5个数字换1行, \n在java中属于换行符
【43】在考生文件夹中存有文件名为Java_3.java的文件, 该程序是不完整的, 请在注释行"//**********Found**********"下一行语句的下划线地方填入正确内容, 然后删除下划线, 请勿删除注释行或改动其他已有语句内容。存盘时文件必须存放在考生文件夹下, 不得改变原有文件的文件名。
本题的要求是:
创建一个顶层框架类的对象, 设置框架左上角的标题为"股票分析系统", 并将顶层框架放置
到屏幕中央, 使程序的输出界面如下图所示:

1.new JFrame 2.setTitle 3.jf
本题考查考生对窗口的相关设置操作
填空1 : JFrame是指一个计算机语言-java的GUI程序的基本思路是以JFrame为基础, 它是屏幕上window的对象, 能够最大化、最小化、关闭, 创建其对象时需要用关键new
填空2 : JFrame类提供设置标题的方法, setTitle()设置标题
填空3:要将窗口显示出来需用JFrame提供的setVisiable(true), 参数设置为true
posted @ 2020-03-10 15:04  M了个J  阅读(1154)  评论(0编辑  收藏  举报