A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 折纸时代 中级黑马   /  2012-11-22 13:37  /  4362 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 司懿卓 于 2012-11-22 16:59 编辑

程序代码:
  1. <strong>class Singleton
  2. {
  3.         private static Singleton instance;
  4.         //用private修饰无参数的构造器
  5.         private Singleton(){}
  6.         //静态方法,用于返回instance实例
  7.         //加入自定义控制,保证只产生一个Singleton对象
  8.         public static Singleton getInstance()
  9.         {        
  10.                 //如果instance为null,则新建Singleton对象
  11.                 if (instance == null)
  12.                 {
  13.                         instance = new Singleton();
  14.                 }
  15.                 //返回instance对象
  16.                 return instance;
  17.         }
  18. }
  19. public class SingletonTest
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.                 //创建Singleton对象不能通过构造器
  24.                 Singleton s1 = Singleton.getInstance();
  25.                 Singleton s2 = Singleton.getInstance();
  26.                 System.out.println(s1 == s2);
  27.         }
  28. }</strong>
复制代码
这个是没有问题的..  
注意if 分支语句,如果我把if 控制语句修改成如下:
  1.                 if (instance == null)
  2.                 {
  3.                         instance = new Singleton();
  4.                 }
  5.                 //返回instance对象
  6.                 else
  7.                 {
  8.                         return instance;
  9.                 }
复制代码
则会提示"SingletonTest.java:21: 错误: 缺少返回语句"
但是,else执行体是有return的, 这是为什么???  

===========================================
因为,定义 getInstance()方法时,已经告诉系统,这个方法需要返回值了..  
if else 语句的用意类似于:如果....否则...  
但,这个方法的用意是,如果条件成立了,返回instance.
如果不成立了也是返回instance..
其实,如果在if()语句最后加个 return instance; 也行..
但是,与其这么麻烦,还不如舍弃else ..  
因为,return语句是不管条件成不成立都需要存在的...

还有谢谢版主的辛苦加分~~!!  

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
                if (instance == null)
                {
                        instance = new Singleton();
                }
                //返回instance对象
                else
                {
                        return instance;
                }
这段代码和不加esle是有区别,当执行if{}的内容的时候,else{}是执行不到的,而你的if{}里面没有return,所以会提示错误。
如果不加else,你后面的return都可以执行到。就不会报错了。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
张学永 发表于 2012-11-22 13:43
if (instance == null)
                {
                        instance = new Singl ...

懂了..
就是 如果条件表达式成立了,执行if()里面的代码,就不执行else的代码了.
但是因为定义方法时有返回值类型,所以提示无return语句...

这段代码的愿意是: 不管if条件表达式是否成立,都要有返回值的, 就是
不管成立与否,都需要return语句..

谢谢,看来自己还是太大意了.. 没有仔细去看~  
回复 使用道具 举报
叶桂宏 发表于 2012-11-23 11:49
其实学这么久的java,我感觉吧,自己知道的好少,好像越学越不知道了,我说点我的看法,当定义方法时,如果 ...

谢谢啦,其实这个问题都是因为自己太大意了..  之前已经明白了  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马