计算机二级Java语言程序设计综合选择题
1. 关于Java程序结构
下列哪个关于Java程序结构的描述是正确的?
- A. 一个Java源文件可以有多个public类
- B. 类名必须与文件名相同
- C. main方法必须声明为public static void
- D. 包声明语句可以放在类定义之后
答案:C
解析:一个Java源文件只能有一个public类且文件名必须与该类名相同,包声明必须放在文件开头。
2. 数据类型转换
下列代码片段的输出结果是:
double d = 3.14;
int i = (int)d;
System.out.println(i);
- A. 3.14
- B. 3
- C. 编译错误
- D. 运行时异常
答案:B
解析:强制类型转换会直接截断小数部分。
3. 循环结构
下列哪个循环结构至少会执行一次循环体?
- A. for循环
- B. while循环
- C. do-while循环
- D. 增强for循环
答案:C
解析:do-while循环先执行循环体再判断条件。
4. 数组初始化
下列数组声明和初始化方式正确的是:
- A. int[] arr = new int[3]{1,2,3};
- B. int arr[] = new int[]{1,2,3};
- C. int[3] arr = {1,2,3};
- D. int arr[] = new int[3]{1,2,3};
答案:B
解析:数组声明时不能同时指定大小和初始化值。
5. 字符串操作
String对象的哪个方法可以比较字符串内容是否相同?
- A. ==
- B. equals()
- C. compare()
- D. isEqual()
答案:B
解析:==比较引用地址,equals()比较内容。
6. 继承与多态
下列代码输出结果是:
class Animal {
void sound() { System.out.print("Animal"); }
}
class Dog extends Animal {
void sound() { System.out.print("Dog"); }
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
a.sound();
}
}
- A. Animal
- B. Dog
- C. 编译错误
- D. 运行时错误
答案:B
解析:这是多态的典型表现,运行时调用实际对象的方法。
7. 异常处理
下列哪个异常是受检异常(checked exception)?
- A. NullPointerException
- B. ArrayIndexOutOfBoundsException
- C. IOException
- D. ArithmeticException
答案:C
解析:IOException及其子类都是受检异常,必须处理。
8. 集合框架
下列哪个集合类允许null元素?
- A. TreeSet
- B. Hashtable
- C. HashMap
- D. ConcurrentHashMap
答案:C
解析:TreeSet不允许null,Hashtable和ConcurrentHashMap的key/value都不能为null。
9. 多线程同步
下列哪个关键字可以保证方法或代码块的线程安全?
- A. volatile
- B. static
- C. synchronized
- D. final
答案:C
解析:synchronized是实现线程同步的关键字。
10. 文件IO
读取文本文件内容最适合使用哪个类组合?
- A. FileInputStream + BufferedInputStream
- B. FileReader + BufferedReader
- C. FileOutputStream + PrintWriter
- D. RandomAccessFile + DataInputStream
答案:B
解析:文本文件读取推荐使用字符流Reader系列,BufferedReader可提高效率。
本题考查的是软件测试的目的。
关于软件测试的目的,GrenfordJ.Myers在《TheArtofSoftwareTesting》一书中给出了深刻的阐述:软件测试是为了发现错误而执行程序的过程;一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例;一个成功的测试是发现了至今尚未发现的错误的测试。整体来说,软件测试的目的就是尽可能多地发现程序中的错误。
故本题答案为C。
本题的考查知识点是栈。
栈是限定在一端进行插入与删除的线性表。栈有向上生长堆栈和向下生长堆栈之分,当栈是倒着压的时候,存放一个元素之后 ,top=51-1=50,存两个元素之后,top=51-2=49,因此当top=50时,栈中有51-50=1个元素。答案选C
软件工程包括3个要素,即方法、工具和过程。
本题答案为A。
软件工程包括3个要素,即方法、工具和过程。
本题答案为A。
软件测试过程一般按4个步骤进行,即单元测试、集成测试、验收测试(确认测试)和系统测试。
故本题答案为B。
数据库系统的基本特点:1.数据的高集成性;2.数据的高共享性与低冗余性;3.数据高独立性;4.数据统一管理与控制。因此选项C不正确,其它选项的说法均正确。
故本题答案为C。
由程序调试的概念可知:程序调试活动由两部分组成,其一是根据错误的迹象确定程序中错误的确切性质、原因和位置。其二,对程序进行修改,排除这个错误。所以程序调试的目的就是诊断和改正程序中的错误。
故本题答案为D。
黑盒测试方法主要有:等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。
故本题答案为D。
黑盒测试方法主要有:等价类划分法、边界值分析法、错误推测法、因果图等,主要用于软件确认测试。
故本题答案为C。
若实体A和B是一对多的联系,实体A中的一条记录对应实体B中的多条记录,实体B和C是一对一的联系,实体B中的一条记录对应实体C中的一条记录,即实体C中的记录的一条记录对应实体A中的多条记录,即实体A和C的联系是一对多的联系。
故本题答案为B。
本题考查的是应用程序的扩展名。
1、Java的源程序代码的扩展名为.java。
2、Java的编译器和解释器的扩展名为.exe,他们分别是javac.exe、java.exe。
3、通过Java编译器编译生成的是二进制字节码文件,其扩展名为.class。
4、调用applet小程序的HTML文件的扩展名为.html或.htm。
故本题答案为B。
本题考查的是Java的关键字。
Java中常量null,false,true,new,this,const,break都是小写。
故本题答案为B。
本题考查的是Java标识符。
标识符命名规则为:
1、标识符是以字母、下划线、美元符($)作为首字符的字符串序列。在首字符后面可以跟字母、下划线、美元符和数字。
2、标识符区分大小写。
3、标识符的字符数目没有限制,但为便于阅读和记忆,不宜太长。
另外要注意的是Java中有一些标识符是具有专门意义和用途的,不允许作为一般的标识符用,它们是保留字。例如本题中的super。
故本题答案为D。
本题考查的是表达式。
选项A类型不一致,若此表达式改为s+="books"就对了;
选项B中s[1]表示数组,Java中数组是对象,它需通过new关键字来创建;
选项C中s的类型不确定,如果s定义的是数组的,则此表达式是合法的,因为数组中length是属性,而字符串中是通过length()方法获得字符长度的,故此表达式不合法。若把它改为int len=s.length();就对了;
选项D中toLowerCase()是String类提供的一个方法,作用是将字符串中所有字符变为小写。返回一个字符串值赋给t。
故本题答案为D。
本题考查的是main()方法的组成。
main()方法是一个特殊的方法,它是所有的Java Application程序执行的入口点,所以任何一个Java Application方法必须有且只能有一个main()方法,而且这个main()方法的格式统一为:
public static void main(String args[])
故本题答案为C。
本题考查的是if判断语句。
if-else结构:
if(条件)
statement1;或{block1}
else
statement2;或{block2}
在条件为真时,执行语句statement1(或代码块block1),然后跳过else和statement2(或代码块block2)执行下面的语句;在条件为假时,跳过语句statement1(或代码块block1)执行else后面的statement2(或代码块block2),然后继续执行下面语句。
本题中,条件m == false不成立,执行System.out.println("True");所以输出True。
故本题答案为B。
本题考查的是Java的修饰符。
Java的修饰符包括public,private,protected,friendly,final等。
故本题答案为D。
本题考查的是算术运算符。
首先说明一点,在Java语言中,取模运算符%,其操作数可以为浮点数。
对于二元算术运算符,其表达式结果的类型归纳为以下几类情况:
(1)操作数全为整型,那么,只要其中有一个为long型,则表达式结果为long型。
(2)两个操作数全是byte型或short型,表达式结果也为int型。
(3)操作数为浮点型,只要其中有一个为double型,表达式结果就是double型。
(4)两个操作数全是float型或其中一个是float型,而另外一个是整型,则表达式结果为float型。
由于本题的操作数x,y全为整型,所以表达式结果也为int类型。
故本题答案为B。
本题考查的是表达式的运算。
增量运算符"++"是将操作数加1。对++x与x++的运算结果均为x=x+1,但若将增量运算表达式再作为其他表达式的操作数使用时,i++与++i是有区别的:i++在使用i之后,使i的值加1,因此执行表达式时是以i的值参加表达式的运算的,执行完后,i本身的值变为i+1;而++i是在使用i之前,使i的值加1,因此执行表达式时是以i+1的值参加运算的,执行完后i自身的值也为i+1。
另外,对于二元算术运算符"/",其表达式结果的类型归纳为以下几类情况:
(1)操作数全为整型,那么,只要其中有一个为long型,则表达式结果为long型。
(2)两个操作数全是byte型或short型,表达式结果也为int型。
(3)操作数为浮点型,只要其中有一个为double型,表达式结果就是double型。
(4)两个操作数全是float型或其中一个是float型,而另外一个是整型,则表达式结果为float型。
对一个复杂表达式进行运算时,要按运算符的优先顺序从高到低进行,同级的运算符则按照在表达式中出现的位置从左到右的方向进行。
本题y+=z--/++x由于++的运算优先级高于/,所以表达式即为y=2+3/2,固表达式值为3。
故本题答案为A。
本题考查的是修饰符的含义。
1、public修饰的方法可被其它类访问或引用。
2、abstract修饰的方法是抽象方法,抽象方法没有方法体,要使用抽象方法,必须先实现此抽象方法。
3、final修饰的方法不能被继承。
4、static修饰的方法为静态方法,静态方法不需要类的实例化就可以被类直接调用。
故要使得类名AB可以直接调用method()方法,则必须在method()前用static来修饰。
故本题答案为A。
本题考查的是成员变量的修饰符。
private修饰的变量说明变量为私有访问。只能被该类自己访问或调用,是对成员变量的高级保护。
故本题答案为C。
本题考查的是表达式的运算。
增量运算符"++"是将操作数加1。对++x与x++的运算结果均为x=x+1,但若将增量运算表达式再作为其他表达式的操作数使用时,i++与++i是有区别的:i++在使用i之后,使i的值加1,因此执行表达式时是以i的值参加表达式的运算的,执行完后,i本身的值变为i+1;而++i是在使用i之前,使i的值加1,因此执行表达式时是以i+1的值参加运算的,执行完后i自身的值也为i+1。
故本题答案为C。
本题考查的是多分支语句switch。
当switch后面表达式的值与任一case子句中的值都不匹配时,程序执行default后面的语句;break语句用来在执行完一个case分支后,使程序跳出switch语句;若没有break语句,当程序执行完匹配的case语句序列后,后面的case子句起不到跳出switch语句的作用,这样,程序会继续执行后面的case语句序列,直到遇到break为止。
本题中当m的值为0的时候,会输出"case 0case 1case 2";当m的值为1时,输出"case 1case 2";当m的值为2时,输出"case 2";当m的值为3时,与前面所有case后面的值都不匹配,执行default语句,输出"default"。
故本题答案为D。
本题考查的是多重循环。
首先介绍一下continue语句的功能:continue语句是跳过循环体中下面尚未执行的语句,回到循环体的开始,继续下一轮的循环。
本题程序运行过程如下:
i=0:
j=0 条件j==1不成立,输出j和i,即0 and 0;
j=1 条件j==1成立,执行continue,跳过System.out.println(j+ "and "+i+";");执行下一轮循环j=2;
j=2 条件j<2不满足,退出内层循环,继续外层循环。
i=1:
j=0 条件j==1不成立,输出j和i,即0 and 1;
j=1 条件j==1成立,执行continue,跳过System.out.println(j+ "and "+i+";");执行下一轮循环j=2;
j=2 条件j<2不满足,退出内层循环,继续外层循环。
i=2:
j=0 条件j==1不成立,输出j和i,即0 and 2;
j=1 条件j==1成立,执行continue,跳过System.out.println(j+ "and "+i+";");执行下一轮循环j=2;
j=2 条件j<2不满足,退出内层循环,继续外层循环。
i=3:条件i<3不满足,结束。
故本题答案为A。
本题考查的是监听器。
每个事件都有自己的监听器,监听器本身是一种接口,该接口中的方法,返回值是void类型。当要为指定的类注册监听器时,就可以通过定在实现该接口的类中定义该方法,这样可以在某个事件发生后,将会自动执行相应方法中的代码。
故本题答案为C。
本题考查的是Applet显示。
Applet显示相关的3个方法:
1、paint()方法:Applet的paint()方法具体执行Applet的绘制,该方法定义如下:
public void paint(Graphics g)
paint()方法有一个参数g是Graphics类的实例,该实例对象由浏览器生成,它包含了Applet的图形上下文信息,通过它向Applet中显示信息,该对象相当于Applet的画笔。在调用paint()方法时,由浏览器将该对象传递给paint()方法。
2、update()方法:
public void update(Graphics g)
用于更新Applet的显示。该方法将首先清除背景,再调用paint()方法完成Applet的具体绘制。
3、repaint()方法:
public void repaint()
repaint()方法主要用于Applet的重新显示,它调用update()方法实现对Applet的更新。
故本题答案为B。
本题考查的是异常的概念。
对程序语言而言,编写程序时出现错误是不可避免的,一般有编译错和运行错两类。Java语言认为那些可预料和不可预料的编译和运行时的出错称为异常。在Java语言中,把异常也作为一种对象,它在程序运行出错时被创建,异常控制是Java语言处理程序出错的有效机制。
故本题答案为B。
本题考查的是异常的声明。
在Java语言中,有时一个方法生成一个异常,但该方法并不能确定如何处理此异常,如找不到文件之类的异常,必须将异常传递给调用方法,由调用它的方法来处理,这种时候方法用声明异常抛出,让异常对象可从调用栈向后传递,直至有相应的方法捕获它为止。所以当方法遇到异常又不知如何处理时,应声明异常。
故本题答案为C。
本题考查的是流的概念。
流,最早从C语言中引入的。其可以看成是一个流动的数据缓冲区。数据从数据源方向经过缓冲区流向数据的目的地。在传送的过程中,其传送方式是串行的。在Java中的java.io包中定义了Java中常见流的接口与类。其中包括两个最基本的流的抽象类,它们分别是OutputStream与InputStream。其余的流都分别从这两个基本类中继承而来。
故本题答案为D。
本题考查的是压缩文件。
在java.io包中提供了对压缩文件进行操作的能力。它是通过压缩文件输入流与压缩文件输出流来实现的,其分别继承自InflaterInputStream与DeflaterOutputStream。在创建压缩文件输入流时,其初始化参数是一个FileInputStream类的实例。
故本题答案为B。
本题考查的是布局管理器。
1、CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个构件,当然每层都可以利用Panel来实现复杂的用户界面。
2、GridLayout布局管理器使容器中各个构件呈网格状布局,平均占据容器的空间。即使容器的大小发生变化,每个构件还是平均占据容器的空间。构件在往容器中放置的时候,是按照从上到下、从左到右的规律进行的。
3、BorderLayout布局管理器把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个构件。
4、FlowLayout:构件在容器中的放置规律是从上到下、从左到右进行放置,如果容器足够宽,第一个构件先添加到容器中第一行的最左边,后续的构件依次添加到上一个构件的右边,如果当前行已放置不下该构件,则放置到下一行的最左边。
故本题答案为B。
本题考查的是Java Application。
一个Java Application运行后在系统中作为一个独立的进程参与系统调度,但在该进程中可以通过创建Thread类的实例的方法来创建多个线程。在一个进程中的各个线程之间拥有共同的上下文环境。
故本题答案为B。
本题考查的是对象的串行化。
对Java对象的读、写的过程被称为对象串行化。任何一个对象只有它所对应的类实现了Serializable接口时,才是可串行化的。因此如果要串行化某些类的对象,这些类就必须实现Serializable接口。
故本题答案为A。
本题考查的是Swing构件。
随着发展的需要,Swing出现了,Swing组件几乎都是轻量组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。
Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。
故本题答案为A。
本题考查的是字符串对象的比较运算。
equals()是Object的方法,和"=="一样,功能是比较两个操作数是否是同一个对象,但类库中许多子类重写了equals()方法,使其变为比较两个操作数的内容是否一样,两串相等则返回ture,否则返回false。
故本题答案为B。
本题考查的是动态数组。
Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,Vector等。
java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。
java.util.ArrayList(数组列表)在运行时能动态自动调整数组的大小。ArrayList类在定义数组时,不必限定数组的大小。在数组列表初始化时,可用add()方法将数组元素赋值。
故本题答案为A。
本题考查的是异常处理。
在Java中提供了结构化的异常处理功能,其主要是通过try...catch语句来实现的。在Java中可以将可能产生异常的代码放入到try子句中,如果产生异常,将会执行catch子句。
在本程序执行过程中,由于找不到"test.dat",产生异常,转而执行catch子句,通过语句"System.out.println("exception");",输出:exception。
故本题答案为A。
本题考查的是InputStreamReader类。
InputStreamReader和BufferedReader都是字符类输入流,都是抽象类Reader的子类。
本程序的作用是读取用户输入的一行字符,再输出,由于程序中同时用到InputStreamReader和BufferedReader类的对象,所以输入的字符将被输出两次。根据语句"InputStreamReader ir;"和语句"in=new BufferedReader(ir);"可知,下划线处填"InputStreamReader"。
故本题答案为B。
本题考查的是Applet类的生命周期方法。
Applet类提供了生命周期不同阶段响应主要事件的4种方法:
①void init(),在Applet被下载时调用,一般用来完成所有必需的初始化操作。
②void start(),在Applet初始化之后以及Applet被重新访问时调用。
③void stop(),在Applet停止执行时调用。一般发生在Applet所在的Web页被其他页覆盖时调用。
④void destroy(),在关闭浏览器Applet从系统中撤出时调用。stop()总是在此前被调用。
故本题答案为C。
本题考查的是Applet程序设计。
Applet被下载时,在Applet的init()方法中使用getParameter()方法获取参数。getParameter()方法的入口参数是所取参数的名字(必须与<param>标记中的name指示的名字相同),返回值是参数的值。另外,JAVA是严格区分大小写的,所以参数"MESSAGE"和参数"message"不同。
故本题答案为A。