有道面试题,大家看看

charlesxu 2015-03-25 06:31:27
public class Class1
{
private static Class1 oInstance = null;

private Class1()
{

}

public static Class1 GetInstance()
{
if(oInstance == null)
{
oInstance = new Class1();
}
return oInstance;
}
}


问这段程序有什么问题,我答的是GetInstance被声明成static了,其他类都可以调用它而且不用实例化Class1。

但是oInstance和Class1()都是private的,那其他类调用GetInstance时就不能使用或访问oInstance和Class1()。造成运行时错误。

这样答对吗?
...全文
289 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
狗先生 2015-03-25
  • 打赏
  • 举报
回复
if(oInstance == null){ synchronized(class1.Class){ if(oInstance== null) oInstance = new Class1(); } } return oInstance;
冥王之锤 2015-03-25
  • 打赏
  • 举报
回复
做两点改变: 1.使用volatile声明oInstance ,保障数据是最新的。 2.使用double check 保障线程安全。 3.GetInstance这个方法命名不规范,严格说Class1命名也不规范。
charlesxu 2015-03-25
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
Singleton…… 你去查下设计模式中的单例模式,要的就是这效果 而且这个缺少了lock二次检查 外部是通过GetInstance()方法来获取Class1的实例,在程序中,Class1只会被实例化一次
返回的是oInstance,它已经被声明为statics了,所以只被实例化一次。他让找这段程序的问题。 设计模式的书去哪找呢?他还问这是gang of four设计模型中的哪种,这名字都没听过,现在大学里讲这个吗?
失落夏天 2015-03-25
  • 打赏
  • 举报
回复
貌似你答的不对 单例模式。 虽然一般我写单例都这样写, 但是知道规范的是方法中应该添加synchronized锁,另外方法首字母规范是小写。
  • 打赏
  • 举报
回复
又是单例模式
zhanglujun8755018 2015-03-25
  • 打赏
  • 举报
回复
少了同步 最好用赖汉机制 写单例
  • 打赏
  • 举报
回复
Singleton…… 你去查下设计模式中的单例模式,要的就是这效果 而且这个缺少了lock二次检查 外部是通过GetInstance()方法来获取Class1的实例,在程序中,Class1只会被实例化一次
  • 打赏
  • 举报
回复
引用 5 楼 charlesxu 的回复:
[quote=引用 1 楼 starfd 的回复:] Singleton…… 你去查下设计模式中的单例模式,要的就是这效果 而且这个缺少了lock二次检查 外部是通过GetInstance()方法来获取Class1的实例,在程序中,Class1只会被实例化一次
返回的是oInstance,它已经被声明为statics了,所以只被实例化一次。他让找这段程序的问题。 设计模式的书去哪找呢?他还问这是gang of four设计模型中的哪种,这名字都没听过,现在大学里讲这个吗?[/quote] 这个代码的确是有问题啊,我不是说了吗,少了锁的检查,在并发的情况下可能会导致new多次,违背了只能实例化一次的需求,是GOF23种模式中的Singleton(单例),大学不讲这些东西的,应该,至少我学过的计算机科学与技术不讲这些(他妈的连C#,java都没教过,只教过C)

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧