SCJP认证套题解析之七

4/7/2006来源:Java认证人气:8339

31、Given the following code fragment:
   1) String str = null;

   2) if ((str != null) && (str.length() > 10)) {

   3) System.out.PRintln(\"more than 10\");

   4) }

   5) else if ((str != null) & (str.length() < 5)) {

   6) System.out.println(\"less than 5\");

   7) }

   8) else { System.out.println(\"end\"); }
   Which line will cause error?

   A. line 1

   B. line 2

   C. line 5

   D. line 8

   (c)

   题目:给出下面的代码片断:
   …
   哪些行将导致错误。

   此题需要将代码仔细看清楚,查询没有逻辑错误,if …else的使用没有问题,也没有拼写错误,错误在于第5行的“与”操作符的使用,逻辑操作符(logical Operator)的“与” 应该是&&,而&是位逻辑操作符(bitwise logical operator)的“与”,使用的对象不一样,逻辑操作符的“与”的左右操作数都应该是布尔型(logical boolan)的值,而位逻辑操作符的左右操作数都是整型(integral)值。

   32、Which statements about java code security are true?

   A. The bytecode verifier loads all classes needed for the execution of a program.

   B. Executing code is performed by the runtime interpreter.

   C. At runtime the bytecodes are loaded, checked and run in an interpreter.

   D. The class loader adds security by separating the namespaces for the classes of the local file system from those imported from network sources.

   (bcd)

   题目:下面有关java代码安全性的叙述哪些是对的。
   A. 字节码校验器加载查询执行需要的所有类。

   B. 运行时解释器执行代码。

   C. 在运行时,字节码被加载,验证然后在解释器里面运行。

   D. 类加载器通过分离本机文件系统的类和从网络导入的类增加安全性。

   SL275中描述的Java程序运行的过程是这样的:类加载器(class loader)加载程序运行所需要的所有类,它通过区分本机文件系统的类和网络系统导入的类增加安全性,这可以限制任何的特洛伊木马程序,因为本机类总是先被加载,一旦所有的类被加载完,执行文件的内存划分就固定了,在这个时候特定的内存地址被分配给对应的符号引用,查找表(lookuo table)也被建立,由于内存划分发生在运行时,解释器在受限制的代码区增加保护防止未授权的访问;然后字节码校验器(byte code verifier)进行校验,主要执行下面的检查:类符合JVM规范的类文件格式,没有违反访问限制,代码没有造成堆栈的上溢或者下溢,所有操作 代码的参数类型都是正确的,没有非法的数据类型转换(例如将整型数转换成对象类型)发生;校验通过的字节码被解释器(interpreter)执行,解释器在必要时通过运行时系统执行对底层硬件的合适调用。后三个答案是SL275中的原话。

   33、Given the following code:
   public class Person{
   static int arr[] = new int[10];
   public static void main(String a[]) {
   System.out.println(arr[1];)
   }
   }
   Which statement is correct?
   A. When compilation some error will occur.

   B. It is correct when compilation but will cause error when running.

   C. The output is zero.

   D. The output is null.

   (c)

   题目:给出下面的代码:
   …
   那个叙述是对的。

   A. 编译时将发生错误。

   B. 编译时正确但是运行时出错。

   C. 输出为0。

   D. 输出为null

   int型数组是类对象,它在类被加载时完成初始化,在前面题目中已经有叙述,由于是原始数据类型int,其初始值为0。
   34、Given the following code:
   public class Person{
   int arr[] = new int[10];
   public static void main(String a[]) {
   System.out.println(arr[1]);
   }
   }
   Which statement is correct?
   A. When compilation some error will occur.

   B. It is correct when compilation but will cause error when running.

   C. The output is zero.

   D. The output is null.

   (a)

   给出下面的代码:
   … 
   哪些叙述是对的。
   A. 编译时出错。

   B. 编译时正确而运行时出错。

   C. 输出0。

   D. 输出null。

   实例变量在类的一个实例构造时完成初始化,而且在类的静态方法中不能直接访问类的非静态成员而只能访问类成员(像上题中一样),类的普通方法可以访问类的所有成员和方法,而静态方法只能访问类的静态成员和方法,因为静态方法属于类,而普通方法及成员变量属于类的实例,类方法(静态方法)不能使用属于某个不确定的类的实例的方法和变量,在静态方法里面没有隐含的this,而普通方法有。
   35、public class Parent {
   public int addValue( int a, int b) {
   int s;
   s = a+b;
   return s;
   }
   }
   class Child extends Parent {

   }
   Which methods can be added into class Child?
   A. int addValue( int a, int b ){// do something...}

   B. public void addValue (){// do something...}

   C. public int addValue( int a ){// do something...}

   D. public int addValue( int a, int b )throws MyException {//do something...}

   (bc)

   题目:哪些方法可以加入类Child中。

   此题涉及方法重载(overload),方法重写(override)以及类派生时方法重写的规则。方法重载的规则是:一、参数列表必须不同,个数的不同完全可以,如果个数相同则参数类型的不同不能引起歧意,例如int 和long,float和double就不能作为唯一的类型不同;二、返回值可以不同,但是不能是重载时唯一的不同点(这点和c++中不同,c++中返回类型必须一致)。方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的方法的访问权限低!重写的另一个规则是重写的方法不能比被重写的方法抛弃(throws)更多种类的异常,其抛弃的异常只能少,或者是其子类,不能以抛弃异常的个数来判断种类,而应该是异常类层次结果上的种类。此题中答案a的错误就是重写的访问权限比被重写的方法的低,而b,c都属于重载,d的错误在于比被重写的方法抛弃了更多种类的异常。