计算机等级考试二级Java练习题及解析(6)
1 在进行顺序查找过程中,如果线性表中被查的元素是线性表中的最后一个,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。
信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。
2 模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。
衡量软件的模块独立性的度量标准是耦合性和内聚性。一个模块的内聚性越强,则该模块的模块独立性越强。而内聚性是信息隐蔽和局部化概念的自然扩展。
面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是,使用现实世界的概念抽象地思考问题从而自然地解决问题。它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分中都用应用领域的概念去思考。
总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。
3 数据库概念设计的过程中,视图设计一般有三种设计次序,它们是:
1、自顶向下。这种方法是先从抽象级别高且普遍性强的对象开始逐步细化、具体化与特殊化。
2、由底向上。这种设计方法是先从具体的对象开始,逐步抽象,普遍化与一般化,最后形成一个完整的视图设计。
3、由内向外。这种设计方法是先从最基本与最明显的对象着手逐步扩充至非基本、不明显的其它对象。
4 在方法中定义的局部变量在方法退出时被自动撤消,只有静态变量不会被撤消。如果未对变量指定修释符,在JAVA中将自动将其设置为局部变量,局部变量也叫自动变量,对于方法外面的变量,将在对象被创建时一起被创建,其初值可通过构造函数对其进行初始化。如果方法中是一个简单类型的形参,由于其是按值传递,在编译时会占用存储空间,直到该对象释放时为止。如果形参为一个类类型,其参数是按地址传递,编译时不会为其分配空间,因此该参变量不会存在于方法中。
5 类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookup table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。
7 public class Parent {
public int addValue( int a, int b) {
int s;
s = a+b;
return s;
}
}
class Child extends Parent {
}
选项中__B____方法可以正确加入类Child中且父类的方法不会被覆盖。
A、int addValue( int a, int b ){// do something...}
B、public void addValue (){// do something...}
C、public int addValue( int a, int b )throws MyException {//do something...}
D、public float addValue ( int a ,int b, float b=1.0 ){// do something...}
解析:此题涉及方法重载(overload),方法重写(override)以及类派生时方法重写的规则。方法重载的规则是:
一、参数列表必须不同,个数的不同完全可以,如果个数相同,则参数类型的不同不会引起歧意,例如int和long,float和double就不能作为唯一的类型不同;
二、返回值可以不同,但是不能是重载时唯一的不同点(这点和c++中不同,c++中返回类型必须一致)。
方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低!
重写的另一个规则是重写的方法不能比被重写的方法抛弃(throws)更多种类的异常,其抛弃的异常只能少,或者是其子类,不能以抛弃异常的个数来判断种类,而应该是异常类层次结果上的种类。
此题中选取项A的错误就是重写的访问权限比被重写的方法的低,而B属于重载,选项C的错误在于比被重写的方法抛弃了更多种类的异常。选项D中,当只传递两个变量的值的时候,那系统就不知道倒底调用哪个方法了,因为b为常量,可以不指定,所以只有选项B是符合题意的。
8 假设有以下代码
String s= "hello";
String t = "hello";
char c[] = {’h’,’e’,’l’,’l’,’o’} ;
下列选项中返回false的语句是 B 。
A、s.equals(t); B、t.equals(c); C、s==t; D、t.equals(new String("hello"));
解析:==操作符比较的是操作符两端的操作数是否是同一个对象,而String的equals()方法比较的是两个String对象的内容是否一样,其参数是一个String对象时才有可能返回true,其它对象都返回假。需要指出的是由于s和t并非使用new创建的,他们指向内存池中的同一个字符串常量,因此其地址实际上是相同的(这个可以从反编译一个简单的测试程序的结果得到,限于篇幅不列出测试代码和反编译的分析),因此答案C也是正确的。
9 欲构造ArrayList类的一个实例,此类实现了List接口,下列____B__方法是正确的。
A、ArrayList myList=new Object( ); B、List myList=new ArrayList( );
C、ArrayList myList=new List( ); D、List myList=new List( );
解析:不能直接建立接口的实例,只能通过实现接口的相应的类来实现接口。
10 下列程序运行的结果是__B____。
public class Example{
String str=new String("good");
char[]ch={’a’,’b’,’c’};
public static void main(String args[]){
Example ex=new Example();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+" and ");
System.out.print(ex.ch);
}
public void change(String str,char ch[]){
A、good and abc B、good and gbc C、test ok and abc D、test ok and gbc
11 Java语言中,原始数据类型变量是按值传递的,引用类型变量是按地址传递的。
12 要从文件"file.dat"文件中读出第10个字节到变量C中,下列__A____方法适合。
A、FileInputStream in=new FileInputStream("file.dat"); in.skip(9); int c=in.read();
B、FileInputStream in=new FileInputStream("file.dat"); in.skip(10); int c=in.read();
C、FileInputStream in=new FileInputStream("file.dat"); int c=in.read();
D、RandomAccessFile in=new RandomAccessFile("file.dat"); in.skip(9); int c=in.readByte();
解析:Java提供FileInputStream是将文件作为流的方式读取,它是按照文件的顺序从0位置开始进行读取,RandomAccessFile是随机读取数据,读取的位置不一定是从0开始,可以使用skip(n)方法来跳过n个字符,通过readByte()读取一个字符,通过read()可以读取输入流中的一个字符。
13 下列代码___C___会出错。
1) public void modify() {
2) int i,j,k;
3) i=100;
4) while (i>0) {
5) j=i*2;
6) System.out.println (" The value of j is " +j );
7) k=k+1;
8) i--;
A、line 4 B、line 6 C、line 7 D、line 8
解析:由于Java中声明变量并没有分配内存空间,必须通过初始化才能使用变量。
14 下面关于Applet的说法正确的是__B____。
A、Applet也需要main方法 B、Applet继承自java.awt.Applet或javax.swing.JApplet
C、Applet能访问本地文件 D、Applet程序不需要编译
解析:Java Applet的字节码文件必须嵌入HTML的文件中并由负责解释HTML文件的WWW浏览器充当解释器来解释运行。因此Applet不需要main方法,但必须继承java.awt.Applet类或javax.swing.JApplet,因为这两个类实现了Applet程序于浏览器的通讯。
15 为了系统的安全,一般情况下Applet程序不能访问本地文件,只有通过授权后才能读写。
16 下列关于for循环和while循环的说法中___A___是正确的。
A、while循环能实现的操作,for循环也都能实现
B、while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果
C、两种循环任何时候都可替换 D、两种循环结构中循环体都不可以为空
解析:
for循环的一般形式为:
for(<初始化>; <条件表过式>; <增量>)
语句;
初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用";"分开。
例如:
for(i=1; i<=10; i++)
语句;
上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i>10时,结束循环。
注意:
1、for循环中语句可以为语句体,但要用"{"和"}"将参加循环的语句括起来。
2、for循环中的"初始化"、"条件表达式"和"增量"都是选择项,即可以缺省,但";"不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。
17 下列关于Java Application与Java Applet程序的差别描述正确的是 D 。
A、运行方式不同,程序结构相同,运行工具不同,受到的限制相同
B、运行方式相同,程序结构不同,运行工具不同,受到的限制相同
C、运行方式相同,程序结构相同,运行工具不同,受到的限制也不同
D、运行方式不同,程序结构不同,运行工具不同,受到的限制也不同
解析:
Application和Java Applet的区别。
Java语言是一种半编译半解释的语言。Java的用户程序分为两类:Java Application和Java Applet。这两类程序在组成结构和执行机制上都有一定的差异,主要体现在以下几方面:
(1)运行方式不同。Java Application是完整的程序,可以独立运行;Java Applet程序不能单独运行,它必须嵌入到用HTML语言编写的Web页面中,通过与Java兼容的浏览器来控制执行。
(2)运行工具不同。Java Application程序被编译以后,用普通的Java解释器就可以使其边解释边执行,而Java Applet必须通过网络浏览器或者Applet观察器才能执行。
(3)程序结构不同。每个Java Application程序必定含有一个并且只有一个main方法,程序执行时,首先寻找main方法,并以此为入口点开始运行。含有main方法的那个类,常被称为主类,也就是说,Java Application程序都含有一个主类。而Applet程序则没有含main方法的主类,这也正是Applet程序不能独立运行的原因。尽管Applet没有含main方法的主类,但Applet一定有一个从java.applet.Applet派生的类,它是由Java系统提供的。
(4)受到的限制不同。Java Application程序可以设计成能进行各种操作的程序,包括读/写文件的操作,但是 Java Applet 对站点的磁盘文件既不能进行读操作,也不能进行写 操作。然而,由于Applet的引入,使Web页面具有动态多媒体效果和可交互性能,这使由名为超文本、实为纯文本的HTML语言编写成的Web页面真正具有了超文本功能,不但可以显示文本信息,而且还可以有各种图片效果和动态图形效果,从而使页面显得生动美丽;另外,Applet使Web页面增加了按钮等功能,从而增加了交互性。
故本题答案为D。
18 在java.applet、java.awt、java.awt.image包中,包含了许多图象支持的类和方法。在程序中图像由一个java.Image类的对象来表示。目前Java所支持的图像格式有:GIF、JPEG、和PNG3种。其中PNG格式是JDK1.3以上版本支持的一种光栅图像格式,它的显示方法与其他两格式相同。
19 假设有String a="A";char b=’A’;int c=65,下面选项中__B____是正确的。
A、if(a==b) {System.out.print("Equal")}
B、if(c==b) {System.out.print("Equal")}
C、if(a==c) {System.out.print("Equal")}
D、if(c=b) {System.out.print("Equal")}
解析:
由于Java是强类型语言,String不能和char,int类型变量直接进行对比。但如果char和int两类型在同一个表达式中运算,系统是可以进行自动类型转换的,因此这两个类型的变量可以比较。
软件工程的基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。
信息隐蔽是指采用封装技术,将程序模块的实现细节隐藏起来,使模块接口尽量简单。
典型的数据流类型有两种:变换型和事务型。
变换型:是指信息沿输入通路进入系统,同时由外部形式变换为内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。
事务型:在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能,这种数据流就叫做事务。
java.awt包是Java语言用来构建图形用户界面(GUI)的类库,它包括了许多界面元素和资源,主要在低级绘图操作、图形界面组件和布局管理、以及界面用户交互控制和事件响应三个方面支持界面设计。