快速业务通道

Java程序员面试问答 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {    private Singleton(){}    //在自己内部定义自己一个实例,是不是很奇怪?    //注意这是private 只供内部调用    private static Singleton instance = new Singleton();    //这里提供了一个供外部访问本class的静态方法,可以直接访问    public static Singleton getInstance() {      return instance;    } }

第二种形式:

public class Singleton {    private static Singleton instance = null;    public static synchronized Singleton getInstance() {    //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次    //使用时生成实例,提高了效率!    if (instance==null)      instance=new Singleton(); return instance;   } }

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

Hashtable和HashMap

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。---www.bianceng.cn

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

Java程序员面试问答(5)

时间:2010-12-02

实践题

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();   } }

有错吗?

答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量

(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

3.

abstract class Something {   private abstract String doSomething (); }

这好像没什么错吧?

答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract method封锁起来呢? (同理,abstract method前不能加final)。

4.

public class Something {   public int addOne(final int x) {    return ++x;   } }

这个比较明显。

答案: 错。int x被修饰成final,意味着x不能在addOne method中被修改。

Java程序员面试问答(6)

时间:2010-12-02

5.

public class Something {   public static void main(String[] args) {    Other o = new Other();    new Something().addOne(o);   }   public void addOne(final Other o) {    o.i++;   } } class Other {   public int i; }

和上面的很相似,都是关于final的问题,这有错吗?

答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的reference

(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号