Java面试陷阱第三波

6.

class Something {

int i;

public void doSomething() {

System.out.println("i = " + i);

}

}

有什么错呢? 看不出来啊。

答案: 正确。输出的是"i = 0"。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。

7.

class Something {

final int i;

public void doSomething() {

System.out.println("i = " + i);

}

}

和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?

答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为"final int i = 0;"。

8.

public class Something {

public static void main(String[] args) {

Something s = new Something();

System.out.println("s.doSomething() returns " + doSomething());

}

public String doSomething() {

return "Do something ...";

}

}

看上去很完美。

答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能访问non-static instant variable。

9.

此处,Something类的文件名叫OtherThing.java

class Something {

private static void main(String[] something_to_do) {

System.out.println("Do something ...");

}

}

这个好像很明显。

答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文件名相同。

10.

今天最难的一题:

interface Playable {

void play();

}

interface Bounceable {

void play();

}

interface Rollable extends Playable, Bounceable {

Ball ball = new Ball("PingPang");

}

class Ball implements Rollable {

private String name;

public String getName() {

return name;

}

public Ball(String name) {

this.name = name;

}

public void play() {

ball = new Ball("Football");

System.out.println(ball.getName());

}

}

这个错误不容易发现。

答案: 错。"interface Rollable extends Playable, Bounceable"没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认为public static final。也就是说"Ball ball = new Ball("PingPang");"实际上是"public static final Ball ball = new Ball("PingPang");"。在Ball类的Play()方法中,"ball = new Ball("Football");"改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。

时间: 2024-09-17 03:55:47

Java面试陷阱第三波的相关文章

Java面试陷阱第二波

1. abstract class Name { private String name; public abstract boolean isStupidName(String name) {} } 大侠们,这有何错误? 答案: 错.abstract method必须以分号结尾,且不带花括号. 2. public class Something { void doSomething () { private String s = ""; int l = s.length(); } }

Java面试笔试题大汇总(最全+详细答案)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个题都自己测试给出了答案 ,如果你对某个题有疑问或者不明白,可以电脑端登录把题目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步! 以下内容来自这位前辈 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题

JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结(转)

hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好Hibernate. 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求

关于今天的java面试,大家发表下评论

问题描述 关于今天的java面试,大家发表下评论 贵公司在某网上看到我简历,打来电话邀请面试.网上简单搜索下该公司,决定去面试看看 笔试有一题 是否存在一个数 使得 i+1<i ()选项 A.不存在 B.存在 C.知道 D.不知道 面试我的那个人应该是个项目经理,看到我这题选了A 惊讶的问我这存在么? 我就说会产生溢出他还是不甘心. 面到一半的时候,问道数据库了删除重复数据sql语句,然后叫来了另一个人面我,上来就问我对Erlang有没有兴趣,学习一门新的语言看法.我就GG了,我是来面试java

3年经验面试-java面试 3年左右经验大概会问些什么问题?

问题描述 java面试 3年左右经验大概会问些什么问题? java面试 3年左右经验大概会问些什么问题?年底了大家都懂的..求解答 解决方案 问的一般都是做过的项目之类的,或者一些使用比较广泛的技术什么的 解决方案二: 100% 会问你 工作几年了....哈哈 解决方案三: 可能会问你吃饭了没-- 解决方案四: 肯定会问你做过的项目,以及项目的技术和你的设计思想,你所用的技术,可能当场给你个简单的管理系统要你设计怕

java面试常见问题之Hibernate总结_java

主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检索策略是什么,分别适用于哪种场合,ORM解决的不匹配问题, Hibernate映射继承关系的3种方式,Session的find()方法以及Query接口的区别等方面问题的总结,具体内容如下: 1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使

急求JAVA面试经验

问题描述 事情是这样的:今天收到华为的面试通知,说这周或下周面试,我挺高兴的,但是我2年工作经验都是用C做嵌入式软件开发的,我也跟他们说了,他们说是想让我做JAVA方面的开发,面试到时候会聊些JAVA基础和以前工作的事,所以现在想恶补一下JAVA方面的基础的知识,增加的面试几率,有没有朋友经历过类似的事?求华为JAVA面试经历和JAVA入门资料.想去华为加班,,希望大家帮帮忙! 解决方案 解决方案二:华为一般面试项目经验和基本知识.所以多看些基础知识.解决方案三:基础的易忽略的知识解决方案四:引

Java面试题目集锦_java

1.equals方法用于比较对象的内容是否相等(覆盖以后) 2.hashcode方法只有在集合中用到 3.当覆盖了equals方法时,比较对象是否相等将通过覆盖后的equals方法进行比较(判断对象的内容是否相等). 4.将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,如果不相等直接将该对象放入集合中.如果hashcode值相等,然后再通过equals方法判断要放入对象与集合中的任意一个对象是否相等,如果equals判断不相等,直接

Java 面试中的陷阱

自己也面试了很多家公司,觉得这些对今后的学习和工作非常有帮助. 总结的一些知识点非常有代表性.以下是正文. --------------------------------------------------------------------------------------------- 找工作要面试,有面试就有对付面试的办法.以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN, 以及其它大小公司. 面试是没