();
9. a.add(1); a.add(5); a.add(3);
11. Collections.sort(a);
12. a.add(2);
13. Collections.reverse(a);
14. System.out.println(a);
15. }
16.
}
What is the result?
A. [1, 2, 3, 5]
B. [2, 1, 3, 5]
C. [2, 5, 3, 1]
D. [5, 3, 2, 1]
E. [1, 3, 5, 2]
F. Compilation fails.
G. An exception is thrown at runtime.
Answer: C
Collections.sort(a);实现了排序,而reverse方法是反转集合中的所有元素。
8.Given
11. public interface Status {
12. /* insert code here */ int MY_VALUE = 10;
13. } Which three are valid on line
12?
(Choose three.
)A. final
B. static
C. native
D. public
E. private
F. abstract
G. protected
Answer: A,B,D
接口中,变量默认是public static final,而方法默认是public,不能改变。
9.Given:
5. class Atom {
6. Atom() { System.out.print("atom "); }
7. }
8. class Rock extends Atom {
9. Rock(String type) { System.out.print(type); }
10. }
11. public class Mountain extends Rock {
12. Mountain() {
13. super("granite ");
14. new Rock("granite ");
15. }
16. public static void main(String[] a) { new Mountain(); }
17. }
What is the result?
A. Compilation fails.
B. atom granite
C. granite granite
D. atom granite granite
E. An exception is thrown at runtime.
F. atom granite atom granite
Answer: F
当调用子类的构造函数的时候,如果没有显式调用父类的构造函数,那么父类的默认构造函数将被调用,如果父类没有默认的构造函数,编译器就会警告出错。
10.Click the Exhibit button. Which three statements are true? (Choose three.)
A. Compilation fails.
B. The code compiles and the output is 2.
C. If lines 16, 17 and 18 were removed, compilation would fail.
D. If lines 24, 25 and 26 were removed, compilation would fail.
E. If lines 16, 17 and 18 were removed, the code would compile and the output would be 2.
F. If lines 24, 25 and 26 were removed, the code would compile and the output would be 1.
Answer: B,E,F
注意这里有两个内部类,一个是名为A的内部类A,另一个是名为A的局部内部类A,在testFoo方法内部,局部内部类将屏蔽内部类A。 所以当调用Beta类型对象的testFoo方法时,将输出第28行的内容,new A()调用的是局部内部类A的构造函数,返回一个局部内部类A给fubar()函数,最终输出2。如果删除16,17,18行,由于局部内部类A在方法testFoo()内部屏蔽了外部的内部类A可以看出不会对局部内部产生任何影响。如果删除24,25,26行,那么本来被这个局部内部类屏蔽的不可见的局部类A 变得可见,输出自然也是1了。
11.Given:
10. class Line {
11. public class Point { public int x,y;}
12. public Point getPoint() { return new Point(); }
13. }
14. class Triangle {
15. public Triangle() {
16. // insert code here
17. }
18.
}
Which code, inserted at line 16, correctly retrieves a local instance of a Point object?A. Point p =
Line.getPoint()
;
B. Line.Point p = Line.getPoint()
;
C. Point p = (new Line()).getPoint()
;
D. Line.Point p = (new Line()).getPoint()
;
Answer: D
在内部类的外围类外使用内部类的时候,就像上面那个Line.Point p = (new Line()).getPoint()
即OuterClassName.InnerClassName p = OuterClassObject.method();//其中method方法返回OuterClassName.InnerClassName类型的对象
12.Given:
11. class Alpha {
12. public void foo() { System.out.print("Afoo "); }
13. }
14. public class Beta extends Alpha {
15. public void foo() { System.out.print("Bfoo "); }
16. public static void main(String[] args) {
17. Alpha a = new Beta();
18. Beta b = (Beta)a;
19. a.foo();
20. b.foo();
21. }
22.
}
What is the result?
A. Afoo Afoo
B. Afoo Bfoo
C. Bfoo Afoo
D. Bfoo Bfoo
E. Compilation fails.
F. An exception is thrown at runtime.
Answer: D
考察多态性,编译器认为a是Alpha类型,b是Beta类型,但是虚拟机知道a和b的真实类型是Beta,所以调用Beta类的函数。
13.Click the Exhibit button.
Which statement is true about the classes and interfaces in the exhibit?
A. Compilation will succeed for all classes and interfaces.
B. Compilation of class C will fail because of an error in line 2.
C. Compilation of class C will fail because of an error in line 6.
D. Compilation of class AImpl will fail because of an error in line 2.
Answer: C
考察多态性的动态绑定,如果方法的签名相同,则返回类型应该与超类的相同或是超类中返回类型的子类型。上题中C类中有方法Object execute() 以及 String execute(),Object不是Strng类型的子类型,所以错误。
14.Which two code fragments correctly create and initialize a static array of int elements? (Choose two.)
A. static final int[] a = { 100,200 };
B. static final int[] a;
static { a=new int[2]; a[0]=100; a[1]=200;
}
C. static final int[] a = new int[2]{ 100,200 }
;
D. static final int[] a;
static void init() { a = new int[3]; a[0]=100; a[1]=200;
}
Answer: A,B
考察static修饰符。
A选项是经典定义。
B是一个静态初始化块。类的初始化是按照这样的顺序进行的:首先定义域field,然后就会执行静态初始化块,然后再执行构造函数。
C错在既然你已经用{ 100,200 }初始化了数组,就不能再定义维数了。
D中init()方法在初始化的时候根本就不会执行,除非你在某个函数中显式调用。
15.Given:
10. interface Foo { int bar(); }
11. public class Sprite {
12. public int fubar( Foo foo ) { return foo.bar(); }
13. public void testFoo() {
14. fubar(
15. // insert code here
16. );
17. }
18.
}
Which code, inserted at line 15, allows the class Sprite to compile?A. Foo { public int bar() { return 1;
}
B. new Foo { public int bar() { return 1;
}
C. new Foo() { public int bar() { return 1;
}
D. new class Foo { public int bar() { return 1; }
Answer: C
匿名内部类。
16.Given:
1. class Alligator {
2. public static void main(String[] args) {
3. int []x[] = {{1,2}, {3,4,5}, {6,7,8,9}};
4. int [][]y = x;
5. System.out.println(y[2][1]);
6. }
7.
}
What is the result?A. 2
B. 3
C. 4
D. 6
E. 7
F. Compilation fails.
Answer: E
很简单的数组题。 int []x[] 与 int [][]x以及 int x[][]都是一样的。
17.Given:
22. StringBuilder sb1 = new StringBuilder("123");
23. String s1 = "123";
24. // insert code here
25. System.out.println(sb1 + " " + s1)
;
Which code fragment, inserted at line 24, outputs "123abc 123abc"
?A. sb1.append("abc"); s1.append("abc")
;
B. sb1.append("abc"); s1.concat("abc")
;
C. sb1.concat("abc"); s1.append("abc")
;
D. sb1.concat("abc"); s1.concat("abc")
;
E. sb1.append("abc"); s1 = s1.concat("abc")
;
F. sb1.concat("abc"); s1 = s1.concat("abc")
;
G. sb1.append("abc"); s1 = s1 + s1.concat("abc")
;
H. sb1.concat("abc"); s1 = s1 + s1.concat("abc")
;
Answer: E
考察String类和StringBuilder类。String类有一个concat函数,String str = s.concat("one");用来把字符串添加到s的尾部,并把结果返回给str,注意String类型的变量是不变的,s并没有变化。。而StringBuilder的append方法,sb.append("one");直接把字符串添加到sb引用的StringBuilder对象上。
18.Given that the current directory is empty, and that the user has read and write permissions, and the
following:
11. import java.io.*;
12. public class DOS {
13. public static void main(String[] args) {
14. File dir = new File("dir");
15. dir.mkdir();
16. File f1 = new File(dir, "f1.txt");
17. try {
18. f1.createNewFile();
19. } catch (IOException e) { ; }
20. File newDir = new File("newDir");
21. dir.renameTo(newDir);
22. }
23.
}
Which statement is true?
A. Compilation fails.
B. The file system has a new empty directory named dir.
C. The file system has a new empty directory named newDir.
D. The file system has a directory named dir, containing a file f1.txt.
E. The file system has a directory named newDir, containing a file f1.txt.
Answer: E
考察java.io包。
19.Given:
11. class Converter {
12. public static void main(String[] args) {
13. Integer i = args[0];
14. int j = 12;
15. System.out.println("It is " + (j==i) + " that j==i.");
16. }
17. }
What is the result when the programmer attempts to compile the code and run it with the
command java Converter 12?
A. It is true that j==i.
B. It is false that j==i.
C. An exception is thrown at runtime.
D. Compilation fails because of an error in line 13.
Answer: D
args是一个String类型的数组,第13行应该是int i = Integer.ParseInt(args[0]);
20.Given:
11. String test = "Test A. Test B. Test C.";
12. // insert code here
13. String[] result = test.split(regex);
Which regular expression, inserted at line 12, correctly splits test into "Test A", "Test B", and "Test
C"?
A. String regex = "";
B. String regex = " ";
C. String regex = ".*";
D. String regex = "\\s";
E. String regex = "\\.\\s*";
F. String regex = "\\w[ \.] +";
Answer: E
正则表达式,String regex = "\\.\\s*";表示根据点(dot)和空格(space)来分割字符串。
21.Given:
5. import java.util.Date;
6. import java.text.DateFormat;
21. DateFormat df;
22. Date date = new Date();
23. // insert code here
24. String s = df.format(date);
Which code fragment, inserted at line 23, allows the code to compile?
A. df = new DateFormat();
B. df = Date.getFormat();
C. df = date.getFormat();
D. df = DateFormat.getFormat();
E. df = DateFormat.getInstance();
Answer: E
DateFormat.类的静态方法getInstance()返回一个DateFormat类型的对象,
public static final DateFormat getInstance()
Get a default date/time formatter that uses the SHORT style for both the date and the time.
22.Given a class Repetition:
1. package utils;
2.
3. public class Repetition {
4. public static String twice(String s) { return s + s; }
5. } and given another class Demo: 1. // insert code here
2.
3. public class Demo {
4. public static void main(String[] args) {
5. System.out.println(twice("pizza"));
6. }
7. }
Which code should be inserted at line 1 of Demo.java to compile and run Demo to print
"pizzapizza"?
A. import utils.*;
B. static import utils.*;
C. import utils.Repetition.*;
D. static import utils.Repetition.*;
E. import utils.Repetition.twice();
F. import static utils.Repetition.twice;
G. static import utils.Repetition.twice;
Answer: F
静态导入,可以导入类,类中的静态方法,静态域。格式import static ......
import static utils.Repetition.twice;//导入Repetition类中的twice静态方法。
import static utils.Repetition.*;//导入Repetition类中的所有静态方法和静态域。
23.A UNIX user named Bob wants to replace his chess program with a new one, but he is not sure where
the old one is installed. Bob is currently able to run a Java chess program starting from his home directory
/home/bob using the command: java -classpath /test:/home/bob/downloads/*.jar games.Chess Bob's
CLASSPATH is set (at login time) to:/usr/lib:/home/bob/classes:/opt/java/lib:/opt/java/lib/*.jar
What is a possible location for the
Chess.class file?
A. /test/Chess.class
B. /home/bob/Chess.class
C. /test/games/Chess.class
D. /usr/lib/games/Chess.class
E. /home/bob/games/Chess.class
F. inside jarfile /opt/java/lib/Games.jar (with a correct manifest)
G. inside jarfile /home/bob/downloads/Games.jar (with a correct manifest)
Answer: C
-classpath 命令会把路径动态设置成 /test和/home/bob/downloads/*.jar,只能在这两个路径里搜索Chess.class,由于在运行的时候classpath后面是games.Chess,所以肯定是games包里面的Chess文件。所以C可能正确。而/home/bob/downloads/*.jar这种写法无效,因为如果有两个jar包都存在games.Chess,系统不知道是哪一个。
24.Given:
3. interface Animal { void makeNoise(); }
4. class Horse implements Animal {
5. Long weight = 1200L;
6. public void makeNoise() { System.out.println("whinny"); }
7. }
8. public class Icelandic extends Horse {
9. public void makeNoise() { System.out.println("vinny"); }
10. public static void main(String[] args) {
11. Icelandic i1 = new Icelandic();
12. Icelandic i2 = new Icelandic();
13. Icelandic i3 = new Icelandic();
14. i3 = i1; i1 = i2; i2 = null; i3 = i1;
15. }
16.
}
When line 15 is reached, how many objects are eligible for the garbage collector?A. 0
B. 1
C. 2
D. 3
E. 4
F. 6
Answer: E
垃圾回收GC。
我们假设13行结束的时候,i1引用的对象叫A,i2引用的对象叫B,i3引用的对象叫C。
现在考虑在15行的时候,i1和i3都引用B,而i2引用为null,所以目前有A和C两个对象没有变量引用,所以这两个对象是可以被回收的。注意,A,B对象中含有Long类型的对象,所以,一共有4个变量可以被回收。
25.Click the Exhibit button.
Given the fully-qualified class names: com.foo.bar.Dog
com.foo.bar.blatz.Book com.bar.Car com.bar.blatz.Sun Which graph represents the correct directory
structure for a JAR file from which those classes can be used by the compiler and JVM?
A. Jar A
B. Jar B
C. Jar C
D. Jar D
E. Jar E
Answer: A
26.Given classes defined in two different files:
1. package util;
2. public class BitUtils {
3. private static void process(byte[] b) {}
4. }
1. package app;
2
. public class SomeApp
{
3. public static void main(String[] args)
{
4. byte[] bytes = new byte[256]
;
5. // insert code here
6.
}
7.
}
What is required at line 5 in class SomeApp to use the process method of BitUtils?
A. process(bytes)
;
B. BitUtils.process(bytes)
;
C. app.BitUtils.process(bytes)
;
D. util.BitUtils.process(bytes)
;
E. import util.BitUtils.*; process(bytes)
;
F. SomeApp cannot use the process method in BitUtils.
Answer: F
private,根本就不能使用。
27.Given:
11. public class ItemTest {
12. private final int id;
13. public ItemTest(int id) { this.id = id; }
14. public void updateId(int newId) { id = newId; }
15.
16. public static void main(String[] args) {
17. ItemTest fa = new ItemTest(42);
18. fa.updateId(69);
19. System.out.println(fa.id);
20. }
21.
}
What is the result?A. Compilation fails.
B. An exception is thrown at runtime.
C. The attribute id in the ItemTest object remains unchanged.
D. The attribute id in the ItemTest object is modified to the new value.
E. A new ItemTest object is created with the preferred value in the id attribute.
Answer: A
final修饰符,变量只能被赋值一次。
28.Given:
13. public class Pass {
14. public static void main(String [] args) {
15. int x = 5;
16. Pass p = new Pass();
17. p.doStuff(x);
18. System.out.print(" main x = " + x);
19. }
20.
21. void doStuff(int x) {
22. System.out.print(" doStuff x = " + x++);
23. }
24.
}
What is the result?A. Compilation fails.
B. An exception is thrown at runtime.
C. doStuff x = 6 main x =
6
D. doStuff x = 5 main x =
5
E. doStuff x = 5 main x =
6
F. doStuff x = 6 main x =
5
Answer: D
函数参数的不可变性,不能改变基本类型的参数,但可改变对象的状态。
29.Given:
1. public class GC {
2. private Object o;
3. private void doSomethingElse(Object obj) { o = obj; }
4. public void doSomething() {
5. Object o = new Object();
6. doSomethingElse(o);
7. o = new Object();
8. doSomethingElse(null);
9. o = null;
10. }
11. }
When the doSomething method is called, after which line does the Object created in line 5
become available for garbage collection?
A. Line 5
B. Line 6
C. Line 7
D. Line 8
E. Line 9
F. Line 10
Answer: D
一共有两次通过new Object();创建对象,第5和第7行,分别称之为A和B。
一共有两个Object类型的变量,局部变量o和全局变量o。在第6行结束时,局部变量o和全局变量o都引用A。第七行结束时,局部变量o引用变成了B,而此时全局变量o还在引用A。第八行结束时,doSomethingElse函数将全局变量o的引用改为null,即A不在被变量引用,此时A可被GC回收。
30.Given:
11. public static void test(String str) {
12. int check = 4;
13. if (check = str.length()) {
14. System.out.print(str.charAt(check -= 1) +", ");
15. } else {
16. System.out.print(str.charAt(0) + ", ");
17. }
18. } and the invocation:
21. test("four");
22. test("tee");
23. test("to");
What is the result?
A. r, t, t,
B. r, e, o,
C. Compilation fails.
D. An exception is thrown at runtime.
Answer: C
if (check = str.length())这个错误,编译器会给出错误警告,不能将int转换为boolean之类的。