SCJP一共三道题:对象引用、垃垃回收、断言,撒分50

lsmiler 2004-09-21 02:02:17
Given:
1. interface Beta {}
2.
3. class Alpha implements Beta {
4. String testIt() {
5. return “Tested”;
6. }
7. }
8.
9. public class Main1 {
10. static Beta getIt() {
11. return new Alpha();
12. }
13. public static void main( String[] args ) {
14. Beta b = getIt();
15. System.out.println( b.testIt() );
16. }
17. }
What is the result?
A. Tested
B. Compilation fails.
C. The code runs with no output.
D. An exception is thrown at runtime.
======下一题=============
Given:
20. public float getSalary(Employee e) {
21. assert validEmployee(e);
22. float sal = lookupSalary(e);
23. assert (sal>0);
24. return sal;
25. }
26. private int getAge(Employee e) {
27. assert validEmployee(e);
28. int age = lookupAge(e);
29. assert (age>0);
30. return age;
31. }
Which line is a violation of appropriate use of the assertion mechanism?
A. line 21
B. line 23
C. line 27
D. line 29



======下一题=============

Given:
1. class A {
2. }
3. class Alpha {
4. private A myA = new A();
5.
6. void dolt( A a ) {
7. a = null;
8. }
9. void tryIt() {
10. dolt( myA );
11. }
12. }
Which two statements are correct? (Choose two)
A. There are no instanced of A that will become eligible for garbage collection.
B. Explicitly setting myA to null marks that instance to be eligible for garbage collection.
C. Any call on tryIt() causes the private instance of A to be marked for garbage
collection.
D. Private instances of A become eligible for garbage collection when instances of Alpha
become eligible for garbage collection.
...全文
669 41 打赏 收藏 举报
写回复
41 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
GODProbe 2005-09-02
  • 打赏
  • 举报
回复
interface Beta {}
class Alpha implements Beta {
String testIt() {
return “Tested”;
}
}
public static void main( String[] args ) {
Beta b = new Alpha();
System.out.println( b.testIt() );
}
}
接口本来就是一种协议,至少得有方法声明(无方法体)。

----------------------------------------------------------
第三题翻译:
A. There are no instanc of A that will become eligible for garbage collection.
没有A类的对象可以被回收。
B. Explicitly setting myA to null marks that instance to be eligible for garbage collection.显式定义myA为NULL标记了这个对象可以回收。
C. Any call on tryIt() causes the private instance of A to be marked for garbage
collection.任何对tryIt()的调用导致A的私有实例可以回收。
D. Private instances of A become eligible for garbage collection when instances of Alpha
become eligible for garbage collection.当Alpha的实例可被回收的时候A的私有实例将也可以回收。


darkula 2005-09-02
  • 打赏
  • 举报
回复
楼上的没有仔细读一下你上面那贴么?
我感觉我已经说的很明白了,只有象D答案说的那样,在这个内存地址产生的指向
private A myA = new A();
为NULL时,这个地址才可被VM标记为可回收的;
至于B为什么不对,看我上面的解释吧;
rainly1985 2005-08-31
  • 打赏
  • 举报
回复
楼主有没有答案啊,关注
rainly1985 2005-08-31
  • 打赏
  • 举报
回复
题3:我觉得选AB,因为myA这个应用永远都会指想那个被new出来的对象,所以他不会被回收,这是选a的原因,只有当明确的将myA设为null的时候,它才有可能被回收,也就是满足被回收的条件了,所以选B
rainly1985 2005-08-31
  • 打赏
  • 举报
回复
题1:编译会出错,因为他跟本就没有实现多态,实现多态的前提是要有函数的重写(override),而这个题中的interface中跟本就没有函数,所以不能实现多态,所以选B
darkula 2005-08-31
  • 打赏
  • 举报
回复
同意blackcourser(be stronger……) 说的,嘿嘿~~~当初我考SCJP就帮我解答了不少,现在开始回报这个论坛~~~~~

第一,二题说的已经很清楚了,没什么可补充的了
关于第三题补充下:

用排除法:
来看B和C~~~~
B. Explicitly setting myA to null marks that instance to be eligible for garbage collection.
C. Any call on tryIt() causes the private instance of A to be marked for garbage
collection.

调用tryIt()方法其实就是调用
void dolt( A a ),而它做的唯一事情就是a = null;
在JAVA里,方法的参数传递并不等于将这个参数原本的内存数据放进此方法来进行操作,而是将这个参数的内存地址克隆,我们在这个方法中对此参数所做的一切操作都是在这个克隆的内存地址上,所以你即使将这个克隆的地址赋为NULL,原有的也不会改变;

在垃圾回收机制中,只要这个内存地址还存在有效指向,该地址就不会被回收,这样讲清楚多了吧:P
SCJP中这样的综合考点很多~~~建议大家不要死记硬背 ^__^
dongtianjie 2005-08-29
  • 打赏
  • 举报
回复
第一题是多态性的原因。
接口我们其实就可以简单的理解为继承。
当子类要是上朔到父类是,如Beta b=new Alpha();
返回的对象b 将不能调用Alpha类中定义扩展的方法。
如果说Alpha中的一个方法覆盖了父类的方法。 则对象B 将调用Alpha类覆盖之后的方法。
不会调用Beta类中的方法。
zgysc 2005-08-26
  • 打赏
  • 举报
回复
1选b ,要么强制转换System.out.println(((Alpha)b).testIt());要么在Beta接口中定义testIt方法,在Alpha中覆盖此方法并且类型为public
superslash 2005-08-16
  • 打赏
  • 举报
回复
1、b
2、不会,没看到这呢
3、bc
宇君 2005-08-16
  • 打赏
  • 举报
回复
作个记号,顶
zxd_0511 2005-08-16
  • 打赏
  • 举报
回复
不错,有参考价值!!
Thor_Cascades 2004-11-05
  • 打赏
  • 举报
回复
第三题答案是bc,java是引用,所以实例做参数传进去赋null后相当于myA已经赋null,因此完全可以回收

//To justin_93(梦想) :这个解释明显是错误的,您可能还没有理解Java参数传递的方法。
mlovex 2004-11-03
  • 打赏
  • 举报
回复
有正确答案吗

尤其关注第3题
sysmaster 2004-11-03
  • 打赏
  • 举报
回复
第三:对象应有三个引用指向它this a mya; a=null 后仍有引用指向它,故不能回收
   对象是Alpha类的成员,故Alph类的对象不存在时,A的对象也会被回收
justin_93 2004-10-10
  • 打赏
  • 举报
回复
第三题答案是bc,java是引用,所以实例做参数传进去赋null后相当于myA已经赋null,因此完全可以回收
justin_93 2004-10-10
  • 打赏
  • 举报
回复
第二题答案为ac,java新加的支持,比较简单,只是规则而已
justin_93 2004-10-10
  • 打赏
  • 举报
回复
第一题答案是b:调用了接口没有定义的方法,肯定编译不能通过
yjjbmk 2004-10-10
  • 打赏
  • 举报
回复
第二题能否详细解释一下???英语,看不懂!
请用中文解释一下啊!!!多谢!
wandou999 2004-10-10
  • 打赏
  • 举报
回复
学习
学习
*_*
one_bird 2004-10-08
  • 打赏
  • 举报
回复
学习
加载更多回复(21)
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2004-09-21 02:02
社区公告
暂无公告