黑马程序员技术交流社区

标题: 不看OCJP考题你永远不知道自己的JAVA基础有多差(六) [打印本页]

作者: 杨_扬    时间: 2012-7-11 06:41
标题: 不看OCJP考题你永远不知道自己的JAVA基础有多差(六)
本帖最后由 杨_扬 于 2012-7-11 06:44 编辑

上期答案:
第二十二题
下面的类被定义在两个不同的文件中

1. package util;
2. public classBitUtils {
3.    private static void process(byte[] b) {}
4. }

1. package app;
2. public classSomeApp {
3.      public static void main(String[] args) {
4.              byte[] bytes = new byte[256];
5.              // insert code here
6.     }
7. }
在SomeApp的第五行插入那条代码可以允许主方法调用BitUtils类的process方法?
A. process(bytes);
B.BitUtils.process(bytes);
C.app.BitUtils.process(bytes);
D.util.BitUtils.process(bytes);
E. importutil.BitUtils.*; process(bytes);
F.无法实现.
答案:F
知识点:
JAVA访问权限的问题,我个人认为这个问题问的挺傻的。就算最“博爱”的public权限咱要使用他也要先导包不是?另外,如果process的访问修饰符是public的话,答案E是正确的

第二十三题
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. }
程序的运行结果是?
A. 编译失败.
B. 运行时抛出异常.
C. doStuff x = 6main x = 6
D. doStuff x = 5 main x = 5
E. doStuff x = 5 main x = 6
F. doStuff x = 6 main x = 5
答案:D
考虑方法doStuff方法内x的作用域,方法内的x是一个局域变量,因此在方法内完成了++操作之后对main中的x并没有产生作用,因此答案是D

第二十四题
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. }
如果方法doSomething被调用,在代码的哪一行之后,在第五行创建的Object对象变为可被garbage collector所回收的对象
A. Line 5
B. Line 6
C. Line 7
D. Line 8
E. Line 9
F. Line 10

答案 D
知识点:
要解释清楚这个问题又要堆内存,栈内存的说一大堆,懒得说了,反正大家就记住了吧,空对象不论你创建了多少个,实际上都只有那一个,这里我说的空对象不是null,null你可以理解为什么对象都没有,空对象起码有对象存在,只不过里面内内容。我下面给一段代码出来,对此不明白的可以运行代码看看结果就应该明白了,如果实在不明白,直接联系我,起码我是给一个认真看过题目的人讲心里还不那么别扭
public class NewObject {
        public static void main(String[] args) {
                String a = "";
                String b = "";
                System.out.println(a.hashCode());
                System.out.println(b.hashCode());
        }
}

第二十五题

11. public staticvoid 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. }
并且调用
21.test("four");
22. test("tee");
23.test("to");
结果是什么?
A. r t t
B. r e o
C. 编译失败.
D.运行时抛出异常.
答案C
老外出题有时候也挺无聊的不是嘛?说真的这道题我开始的时候也选A,结果就掉坑了,有木有。仔细看第13行if的判断条件,里面用的是 “=”而不是“==”当然编译失败了。坑爹啊,天坑。

---------------------------------------------------------分割线----------------------------------------------

本期问题:
第二十六题
1. interface A { public void aMethod(); }
2. interface B { public void bMethod(); }
3. interface C extends A,B { public void cMethod(); }
4. class D implements B {
5.         public void bMethod(){}
6. }
7. class E extends D implements C {
8.         public void aMethod(){}
9.          public void bMethod(){}
10.         public void cMethod(){}
11. }
What is the result?
A. 因为第3行存在问题,因此编译失败.
B. 因为第7行存在问题,因此编译失败.
C. 因为第9行存在问题,因此编译失败.
D. 如果你使用D e = new E()创建了一个类D的实例并调用bMethod()方法,则将调用在第5行处定义的bMethod()方法
E. 如果你使用D e = (D)(new E())创建了一个类D的实例并调用bMethod()方法,则将调用在第5行处定义的bMethod()方法
F. 如果你使用D e = (D)(new E())创建了一个类D的实例并调用bMethod()方法,则将调用在第9行处定义的bMethod()方法

第二十七题
一下哪段代码诠释了“人类有一个最好的朋友—狗”(Man has a best friend who is a Dog)
A. class Man extends Dog { }
B. class Man implements Dog { }
C. class Man { private BestFriend dog; }
D. class Man { private Dog bestFriend; }
E. class Man { private Dog<bestFriend>; }

第二十八题
有如下代码
31. class Foo {
32.          public int a = 3;
33.         public void addFive() { a += 5; System.out.print("f "); }
34. }
35. class Bar extends Foo {
36.         public int a = 8;
37.         public void addFive() { this.a += 5; System.out.print("b " ); }
38. }
执行一下三行代码
Foo f = new Bar();
f.addFive();
System.out.println(f.a);
结果是什么?
A. b 3
B. b 8
C. b 13
D. f 3
E. f 8
F. f 13
G. 编译失败.
H. 抛出异常.

第二十九题
11. class Animal { public String noise() { return "peep"; } }
12. class Dog extends Animal {
13.           public String noise() { return "bark"; }
14. }
15. class Cat extends Animal {
16.           public String noise() { return "meow"; }
17. } ...
30. Animal animal = new Dog();
31. Cat cat = (Cat)animal;
32. System.out.println(cat.noise());
以上代码执行的结果是
A. peep
B. bark
C. meow
D. 编译失败.
E. 抛出异常.

第三十题
1. class Super {
2.         private int a;
3.         protected Super(int a) { this.a = a; }
4. } ...
11. class Sub extends Super {
12.         public Sub(int a) { super(a); }
13.          public Sub() { this.a = 5; }
14. }
一下哪两种修改可以使得以上代码编译通过 (Choose two.)
A. Change line 2 to: public int a;
B. Change line 2 to: protected int a;
C. Change line 13 to: public Sub() { this(5); }
D. Change line 13 to: public Sub() { super(5); }
E. Change line 13 to: public Sub() { super(a); }

作者: 陆强强    时间: 2012-7-11 07:41
别加了,这个系列的题目加了好几分了,十一期到现在了
作者: 陈淑飞    时间: 2012-7-11 12:20
顶下
26. f
27. d
28. c
29. e
30. c d(感觉a b似乎也可以哦?求解)
来自:黑马程序员训练营论坛 Android客户端
作者: 高原    时间: 2012-7-11 12:36
把自己做的考试题和答案以及思考过程贴过来也可以加分吗?
如果这样也行的话,我也要这么做了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2