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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一个铃,一颗珠 中级黑马   /  2013-8-22 23:51  /  1246 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 forward 于 2013-8-24 21:25 编辑

public enum SingletonE {
  INSTANCE {
  @Override
  protected void someMethod() {
   
  }
} ;
    protected abstract void someMethod();  
}

  public static void main(String[] args) {
   SingletonE.INSTANCE;
  }

调用的时候报错,编译不通过。

评分

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

查看全部评分

6 个回复

倒序浏览
SingletonE se = SingletonE.INSTANCE;
试试
回复 使用道具 举报
你应该重新创建一个SingletonE对象,然后用SingletonE.INSTANCE来实例化,就行了;就像楼上说的:

SingletonE se = SingletonE.INSTANCE;
回复 使用道具 举报
我认为为什么是:SingletonE se = SingletonE.INSTANCE;就可以了呢,
用内部类理解:内部类可以直接使用外部类成员,但是外部类要使用内部类的成员的话,那么必须通过内部类对象来调用,所以要使用一个对象来接收。
你还有一个错误的地方,也许是你的失误,就是
} ;
    protected abstract void someMethod();  
} 把此"}"应放到最后。
回复 使用道具 举报
forward 发表于 2013-8-24 10:09
我认为为什么是:SingletonE se = SingletonE.INSTANCE;就可以了呢,
用内部类理解:内部类可以直接使用外 ...

不好意思,这里有个小问题想请教一下,SingletonE.INSTANCE是一个实例对象,如果按内部类来理解,在静态的main()函数中建立内部里对象,那么内部类也要是静态的吧,怎么理解呢?public class Demo {
        public void get(){
                new Demo1();
        }
        class Demo1{     
               
                }
}

上面的小程序运行没有错误,内部类可以直接创建不需要引用的啊。


还有下面的小代码如何理解??public class Demo {
        public void get(){
                new Demo1();        //不报错      
        }
       
}
class Demo1{
        new Demo();                          //报错
}


回复 使用道具 举报
我觉着,SingletonE.INSTANCE就是语法不完整,INSTANCE就是一个常量对象,要不把它赋值: SingletonE e = SingletonE.INSTANCE;
要不就是调用里面的方法SingletonE.INSTANCE.someMethod();
单单把一个对象放在那是不对的吧。

还有内部类哪有什么静态的,class Demo1{
        new Demo();                          //报错是因为构造函数只能是本类的构造函数,名字应该是一致的
}


回复 使用道具 举报
class Demo1{
        new Demo();                          //报错
}
new 出的对象的生命周期就在与这个变量最邻近的一对大括号{}里面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马