首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 计算机考试 > 认证考试 > JAVA认证 >

SCJP认证套题解析之五

2008-10-05 
21、which of the following assignment is not correct?    a. float f 11.1    b ...

21、which of the following assignment is not correct?


   a. float f = 11.1;
   b. double d = 5.3e12;

   c. double d = 3.14159;

   d. double d = 3.14d.

   (a)

   题目:下面的哪些赋值语句是对的。

   浮点数的赋值是带有小数点的数字缺省是double型的,如果在浮点数后面加f或者f则是float,后面加d或者d则是double,科学计数法形式的浮点数也是double型的,而double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要。


   22、given the uncompleted code of a class:
   class person {
   string name, department;
   int age;
   public person(string n){ name = n; }
   public person(string n, int a){ name = n; age = a; }
   public person(string n, string d, int a) {
   // doing the same as two arguments version of constructor
   // including assignment name=n,age=a
   department = d;
   }
   }
   which expression can be added at the "doing the same as..." part of the constructor?

   a. person(n,a);

   b. this(person(n,a));

   c. this(n,a);

   d. this(name,age).

   (c)

   题目:给出下面的不完整的类代码:
   …
   下面的哪些表达式可以加到构造方法中的"doing the same as..."处?

   在同一个类的不同构造方法中调用该类的其它构造方法需要使用this(…)的形式,而且必须是在构造方法的第一行调用,这个和普通的方法重载调用的方式不同,普通的方法可以直接使用方法名加参数来调用,而且调用位置没有限制,因此答案a是不行的,b的语法就是错误的,d的错误在于在父类型的构造函数被调用前不能引用类的成员。构造方法是一个类对象实例化的起点(虽然严格来说首先执行的并不是构造方法的第一个语句,而是内存的分配),因此在构造方法中不能将成员作为参数引用。

   23、which of the following statements about variables and their scopes are true?

   a. instance variables are member variables of a class.

   b. instance variables are declared with the static keyword.

   c. local variables defined inside a method are created when the method is executed.

   d. local variables must be initialized before they are used.
  (acd)

   题目:下面关于变量及其范围的陈述哪些是对的。

   a. 实例变量是类的成员变量。

   b. 实例变量用关键字static声明。

   c. 在方法中定义的局部变量在该方法被执行时创建

   d. 局部变量在使用前必须被初始化。

   类中有几种变量,分别是:局部变量(英文可以为:local\automatic\temporary\stack variable)是定义在方法里的变量;实例变量(英文为:instance variable)是在方法外而在类声明内定义的变量,有时也叫成员变量;类变量(英文为:class variable)是用关键字static声明的实例变量,他们的生存期分别是:局部变量在定义该变量的方法被调用时被创建,而在该方法退出后被撤销;实例变量在使用new xxxx()创建该类的实例时被创建,而其生存期和该类的实例对象的生存期相同;类变量在该类被加载时被创建,不一定要用new xxxx()创建,所有该类的实例对象共享该类变量,其生存期是类的生存期。任何变量在使用前都必须初始化,但是需要指出的是局部变量必须显式初始化,而实例变量不必,原始类型的实例变量在该类的构造方法被调用时为它分配的缺省的值,整型是0,布尔型是false,而浮点型是0.0f,引用类型(类类型)的实例变量的缺省值是null(没有进行实际的初始化,对它的使用将引起nullpointexception),类变量的规则和实例变量一样,不同的是类变量的初始化是在类被加载时。

   24、public void test() {
   try { onemethod();
   system.out.println("condition 1");
   } catch (arrayindexoutofboundsexception e) {
   system.out.println("condition 2");
   } catch(exception e) {
   system.out.println("condition 3");
   } finally {
   system.out.println("finally");
   }

  }
   which will display if onemethod run normally?
   a. condition 1

   b. condition 2

   c. condition 3

   d. finally

   (ad)

   题目:在onemethod()方法运行正常的情况下将显示什么?

   如果try块中的语句在执行时发生异常,则执行从该处中断而进入catch块,根据异常的类型进行匹配,最前面的优先进行匹配比较,只要该异常是catch中指定的异常的子类就匹配成功进而执行相应的catch中的内容,而finally块中的内容无论是否发生异常都将被执行。

   25、given the following code:
   public class test {

1.
1) public class returnit{
2) returntype methoda(byte x, double y){
3) return (short)x/y*2;
4) }
5) }
what is valid returntype for methoda in line 2?
题意:第2行中methoda方的正确返回值类型是什么?
分析:这是一道考察基础知识的问题,比较简单,涉及强制类型转换和表达式数据类型的转换和升级。强制类型转换的方法是在变量或数值前加上需要转换的类型,如(int)12.23 则duble类型的数值被强行转化为int型,当然此时回丢失信息。表达式数据类型的转换原则是在不出现信息丢失的情况下自动升级到一种更长的形式。
解答:判断return后的表达式的值类型即可,(short)的强制转换仅为x,根据自动提升原则表达式的值被提升到y的类型既double,所以答案为double 。
注意:(1)、不带尾巴的数值容易被忽视他的真实类型,比如12和12.0,其中12为int或short型,12.0为duble型。
(2)、二元操作符(如 、-、*、/)当其操作的对象是基本数据类型时,会把其操作的变量自动提升为至少到int型,主要针对byte和short型。例如如下代码会出错:
short a , b, c;
a = 1;
b = 2;
c = a b;//编译指示这行出错了,possible loss of precision
示例:w01.Java

2.
1) class super{
2) public float getnum(){return 3.0f;}
3) }
4)
5) public class sub extends super{
6)
7) }
which method, placed at line 6, will cause a compiler error?
a. public float getnum(){return 4.0f;}
b. public void getnum(){}
c. public void getnum(double d){}
d. public double getnum(float d){return 4.0d;}
题意: 哪一种方法定义放在第6行,会产生编译错误?
分析: 此为一道同时考察overload和override的问题。overload是利用同一个函数名和不同的参数形式来完成不同的功能,不同的参数形式的意思是:有和无参数的区别;参数个数的区别;参数类型的区别和参数的排列方式的区别。overload不能利用返回值来区分。overload现象可出现在同类或父类与继承类中。override的是类继承过程中出现的现象,是对父类方法的改写,所以必须满足以下条件:1、方法名相同;2、返回类型相同;3、参数完全相同。
解答:分别将答案放在第6行,a表示对super类的getnum方法进行override,正确;b语句因为参数与父类的同名函数的参数相同所以不是overload,而返回值与父类同名函数返回值不同所以不是override,进而出错。c表示对继承自super类的getnum方法进行overload,正确;d同c
注意: 考察多个知识点时要综合分析,但首先要保持清醒,弄清考察的意向。
示例: w02.java