Sun java认证考试真题答案及部分解析(一)

注:这是一次java大作业,题目比较老,现在java认证考试已经更名为Oracle java认证考试了

1. What gets printed when the following program 
   is compiled and run? 


class Test {
public static void main(String args[]) {
    int i;
    do {
        i++;
    } while (i < 0);
         System.out.println(i);
}
}


Select 1 correct answer:
A. The program does not compile as i is not initialized. 
B. The program compiles but does not run. 
C. The program compiles and runs but does not print anything. 
D. The program prints 0. 
E. The program prints 1.


答案:A:如果没有初始化便使用基本变量类型,会导致编译时异常,程序不能编译。


2. What gets printed when the following program 
   is compiled and run? 


public class XYZ {
public static void main(String args[]) {
int i,j,k;
for (i = 0; i < 3; i++) 
{
for(j=1; j < 4; j++)
{
for(k=2; k<5; k++) 
{
if((i == j) && (j==k))
System.out.println(i);
} } } } }


Select 1 correct answer:
A. 0 
B. 1 
C. 2 
D. 3 
E. 4


答案:C


3. Given the following code :


class Base{}
public class MyCast extends Base{
static boolean b1=false;
static int i = -1;
static double d = 10.1;
public static void main(String argv[]){
MyCast m = new MyCast();
Base b = new Base();
//Here
}
}


Which of the following, if inserted at the comment //Here 
will allow the code to compile and run without error?


Select 2 correct answers:
A. b = m;
B. m = b;
C. d = i;
D. b1 = i;
解析:A 从子类型到父类型的转换是扩展引用转换,不需要在运行时采取特殊的动作,不会在运行时抛出异常。
B 从超类型到子类型的转换是收缩引用转换,需要在运行时执行测试,以查明实际的引用值是否是新类型的合法值.如果不是, 则会抛出ClassCascException 。在这里,b本身不是MyCast类型的值,因此会导致运行时异常。
C 从int到double的转换是扩展基本转换,基本类型之间的扩展转换永远不会导致运行时异常。但从int或long到float,或者是从long到double都可能导致精度丢失。
D 不允许进行int和boolean之间的类型转换
答案:A、C


4. Given the following classes which of the following 
   will compile without error?


interface IFace{}
class CFace implements IFace{}
class Base{}
public class ObRef extends Base{
public static void main(String argv[])
{
ObRef ob = new ObRef();
Base b = new Base();
Object o1 = new Object();
IFace o2 = new CFace();
}
}


Select 3 correct answers:
A. o1 = o2;
B. b = ob;
C. ob = b;
D. o1 = b;
解析:A 任何对象都可以赋给Object类型的对象,正确
B 子类赋给超类是扩展引用转换,可以进行
C 收缩引用转换,错误
D 扩展引用转换,可以进行
答案 A B D




5. What is the result of compiling and running the following code?


1 public class Test {
2 static int total = 10;
3 public static void main (String args []) {
4 new Test();
5 }
6 public Test () {
7 System.out.println("In test");
8 System.out.println(this);
9 int temp = this.total;
10 if (temp > 5) {
11 System.out.println(temp);
12 }
13 }
14 }


Select 1 correct answer:
A. The class will not compile 
B. The compiler reports an error at line 2 
C. The compiler reports an error at line 9 
D. The value 10 is one of the printed elements 
E. The class compiles but generates a runtime error


答案:D 由于test类没有override toString方法,故在调用println(this)时会直接显示类的有关信息。




6. Carefully examine the following code:


public class StaticTest {
static { System.out.println("Hi there"); }
public void print() {
System.out.println("Hello");
}


public static void main(String args []) {
StaticTest st1 = new StaticTest();
st1.print();
StaticTest st2 = new StaticTest();
st2.print();
}}


When will the string "Hi there" be printed?


Select 1 correct answer:
A. Never
B. Each time a new instance is created 
C. Once, when the class is first loaded into the JVM 
D. Only when the static method is called explicitly


答案 C

Java虚拟机规范约定,类的初始化发生在首次主动使用时。静态变量和静态初始化块的先后,实际上取决于它们在类中出现的先后顺序。


7. Given the following code what is the effect of a being 5?


public class Test {
public void add(int a) {
loop: for (int i = 1; i < 3; i++){
for (int j = 1; j < 3; j++) {
if (a == 5) {
break loop;
}
System.out.println(i * j);
}
}
}
}


Select 1 correct answer:
A. Generates a runtime error 
B. Throws an ArrayIndexOutOfBoundsException 
C. Prints the values: 1, 2, 2, 4 
D. Produces no output


解析:考察标记和break的使用。单纯使用break只跳出当前循环(一层)。如果在要跳出的循环前加标记,那么在加过标记的循环中的任何地方都可以使用break  标记 来跳出该循环
答案:D


8. Given the following class definition:


public class Droitwich{
class one{
private class two{
public void main(){
System.out.println("two");
}
}
}
}


Which of the following statements are true?


Select 1 correct answer:
A. The code will not compile because the classes are nested to 
   more than one level
B. The code will not compile because class two is marked as private
C. The code will compile and output the string two at runtime
D. The code will compile without error


答案:D


9. Given the following code:


class Base { static int oak=99; }
public class Doverdale extends Base{
public static void main(String argv[]){


Doverdale d = new Doverdale();
d.amethod();
}


public void amethod(){
//Here

}
Which of the following if placed after the comment //Here, 
will compile and modify the value of the variable oak?


Select all possible answers:
A. super.oak=1;
B. oak=33;
C. Base.oak=22;
D. oak=50.1;
解析:当子类没有重新定义静态属性则子类的静态属性与父类的静态属性为同一个变量
当子类重新定义了父类静态属性则子类的静态属性与父类的静态属性是两个不同的变量
静态方法调用的是定义这个静态方法的类的静态属性。
答案:A B C




10. What will happen when you attempt to compile 
    and run the following code?


public class Inc {
public static void main(String argv[]) {


Inc inc = new Inc();
int i =0; 
inc.fermin(i);
i = i++;
System.out.println(i);
}


void fermin(int i){
i++;
}
}


Select 1 correct answer:
A. Compile time error
B. Output of 2
C. Output of 1
D. Output of 0


答案:D
i++和++i是什么意思?_百度知道
答 都是i=i+1的意思,区别在于i++是i先不自加,在语句完后自加,++i先自加




11. In the code fragment below, what is the value of k 
    after line 3 executes?


1 int i = -1;
2 int j = i >> 3;
3 int k = j & 129;


A. -1
B. 0
C. 129
D. A very large negative number
E. A very large positive number


解析:本题考察了整数在java虚拟机中的二进制表示。
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
正整数的补码是其二进制表示,与原码相同,
求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1。
简单起见,我们不表示出所有32位,仅表示十二位。
i : -1  1::0000 0000 0001  -1: 1111 1111 11111
第二行,对i进行了移位操作,>>为带符号右移,其移出的空位需要用符号位补齐。格式为  需要移位的数字>>要移的位数
故j = 1111 1111 1111
第三行,&为按位与运算符,129=0000 1000 0001,k=0000 1000 0001,即129
故答案为C。


12. What is the result after the following code executes?


1 short s = 0x00FD;
2 byte b = (byte)s;
3 System.out.println(b);


Select 1 correct answer:
A. Compile time error in line 1
B. Compile time error in line 2
C. 0
D. -3
E. -2
解析:考察对强制类型转换的理解,java中,short类型为16位,占据两个字节,byte类型为八位。第二行,对s进行了强制类型转换,而这实际上是一个收缩基本转换,从带符号整数到整型T的收索转换只是简单地丢弃除n个最低阶位以外的其它所有位,这可能导致数目或者符号的变化。
Java中所有的整数类型都具有符号位,故需要考虑二进制表示
b=0xFD=1111 1101,是一个补码。
将最高位为1的补码转换为原码的步骤为(最高位为0的补码和原码相同)先将补码全部取反,然后+1
b取反后得到0000 0010,加1 : 0000 0011,即3,考虑到这是一个附负数,最后的结果为-3
答案:D


13. Given the following method in an application:


1. public String setFileType( String fname ){
2. int p = fname.indexOf( '.' );
3. if( p > 0 ) fname = fname.substring( 0,p );
4. fname += ".TXT";
5. return fname;
6. }


and given that another part of the class has the following code:


7. String TheFile = "Program.java";
8. File F = new File( setFileType( TheFile ) );
9. System.out.println( "Created " + TheFile );


what will be printed by the statement in line 9?


Select 1 correct answer:
A. Created Program.java
B. Created Program.txt
C. Created Program.java.txt


答案:A




14. Here is the ActionEvent family tree:


java.lang.Object
|--- java.util.EventObject
|--- java.awt.AWTEvent
|---- java.awt.event.ActionEvent


Suppose we have the following code to count events and 
save the most recent event:


int evtCt = 0 ;
AWTEvent lastE ;
public void saveEvent( AWTEvent evt )
{
lastE = evt ;
evtCt++ ;
}


Which of the following calls of saveEvent would run 
without causing an exception? 


Select all possible answers:
A. call with an AWTEvent object reference
B. call with an ActionEvent object reference
C. call with an EventObject object reference
D. call with null value

答案:ABD


15. Suppose we have two classes defined as follows:


class ApBase extends Object implements Runnable
class ApDerived extends ApBase implements Observer


Given two variables created as follows:


ApBase aBase = new ApBase() ;
ApDerived aDer = new ApDerived();


Which of the following Java code fragments will 
compile and execute without error?


Select 1 correct answer:
A. Object obj = aBase ; Runnable rn = obj ;
B. Object obj = aBase ; Runnable rn = (Runnable) obj ;
C. Object obj = aBase ; Observer ob = (Observer)aBase ;
D. Object obj = aDer ; Observer ob2 = obj ;
答案:B?


16. The following lists the complete contents 
    of the file named Derived.java:


 1. public class Base extends Object {
 2. String objType ;
 3. public Base(){ objType = "I am a Base type" ;
 4. }
 5. }
 6.
 7. public class Derived extends Base {
 8. public Derived() { objType = "I am a Derived type";
 9. }
10. public static void main(String args[] ){
11. Derived D = new Derived();
12. }
13. }


What will happen when this file is compiled?


Select 1 correct answer:
A. Two class files, Base.class and Derived.class will be created
B. The compiler will object to line 1
C. The compiler will object to line 7


解析:
答案:B




17. The following method is designed to convert an input string
    to a floating point number, while detecting a bad format. 
    Assume that factor is correctly defined elsewhere:


public boolean strCvt( String s ){
try {
factor = Double.valueOf( s ).doubleValue();
return true ;
} catch(NumberFormatException e){
System.out.println("Bad number " + s );
factor = Double.NaN ;
}finally { System.out.println("Finally");
}
return false ; }


Which of the following descriptions of the results of various 
inputs to the method are correct? Select all possible answers:


A. Input = "0.234" 
   Result:factor = 0.234, "Finally" is printed, true is returned.
B. Input = "0.234"
   Result:factor = 0.234, "Finally" is printed, false is returned.
C. Input = null
   Result:factor = NaN, "Finally" is printed, false is returned.
D. Input = null
   Result:factor unchanged,"Finally" is printed, 
   NullPointerException is thrown.
解析:finally无论在什么情况下都会执行。
对于double.valueof,当输入为null(注意,不是字符串null,字符串null仍然会导致NumberFormatException)时,会导致NullPointerException
答案:A D
18. Here is the hierarchy of Exceptions related to 
    array index errors:


Exception
+-- RuntimeException
+-- IndexOutOfBoundsException
+-- ArrayIndexOutOfBoundsException
+-- StringIndexOutOfBoundsException


Suppose you had a method X which could throw both 
array index and string index exceptions. Assuming 
that X does not have any try - catch statements, 
which of the following statements are correct?




A. The declaration for X must include 
   "throws ArrayIndexOutOfBoundsException, 
    StringIndexOutOfBoundsException".
B. If a method calling X catches IndexOutOfBoundsException, both
   array and string index exceptions will be caught.
C. If the declaration for X includes "throwsIndexOutOfBoundsException",
   any calling method must use a try - catch block.
D. The declaration for X does not have to mention exceptions.


 
 
解析:RuntimeException是运行时异常,属于不可查异常,程序无需声明,也无需处理。
答案:BD

19. Given the following listing of the Widget class:


 1 class Widget extends Thingee{
 2 static private int widgetCount = 0 ;
 3 public String wName ;
 4 int wNumber ;
 5
 6 static synchronized int addWidget(){ widgetCount++ ;
 7 wName = "I am Widget # " + widgetCount ;
 8 return widgetCount ;
 9 }
10 public Widget(){
11 wNumber = addWidget();
12 }
13 }


What happens when we try to compile the class and use 
multiple Widget objects in a program?


Select 1 correct answer: 
A. The class compiles and each Widget will get a unique wNumber
   and wName reflecting the order in which the Widgets were created.
B. The compiler objects to line 7
C. A runtime error occurs in the addWidget method


答案:B 原因:静态方法操作的必须是静态变量


20. Given the following class definition:


public class DerivedDemo extends Demo
{
int M, N, L ;
public DerivedDemo( int x, int y )
{
M = x ; N = y ;
}
public DerivedDemo( int x )
{
super( x );
}
}


Which of the following constructor signatures MUST exist
in the Demo class for DerivedDemo to compile correctly?


Select 2 correct answers:
A. public Demo( int a, int b )
B. public Demo( int c )
C. public Demo( )
答案:B C

你可能感兴趣的:(java,java,认证考试)