赛迪网 > IT技术 Java > (最新更新)Java基础
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Java陷阱一箩筐: 第一日答案与解析2

发布时间:2006.03.10 06:24     来源:CSDN    作者:

Java陷阱一箩筐: 第一日答案与解析2

 

前5题在<<答案与解析2>>中。

 

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");"改变了ballreference,而这里的ball来自Rollable interfaceRollable interface里的ballpublic static final的,finalobject是不能被改变reference的。因此编译器将在"ball = new Ball("Football");"这里显示有错。

 


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· J2EE应用程序部署的一些建议(1) (08-26) · 在Fedora上安装Samba的心得 (02-11)
· Eclipse插件开发系列(3):Hello World插件 (04-10) · Tapestry入门及进阶一 (11-28)
· Tapestry入门及进阶二 (03-08) · Hibernate与JDO肩并肩 (08-16)
· Java 2 图形设计卷II——第2章 applet和应用 (09-20) · XML处理 (05-04)
· J2EE应用程序部署的一些建议(3) (09-25) · Eclipse插件开发系列(0):Java Applicatio (09-17)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 信息化市场百家争鸣 SaaS深陷争议“泥潭”
· 提高管理水平 "两栖"CIO应具备的六大能力
· 国产ITIL运维先行者 四大厂商角力BI市场
· 金融行业GSN专题解决方案 企业网解决方案
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统