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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王广亚 于 2013-8-27 23:22 编辑

有没有定义在局部的静态内部类?答案是否定的,但我想知道为什么不能在局部定义静态的内部类?
  1. class Fu{

  2.       static int num=3;
  3.       static void Demo(){
  4.       static class zi{//这个是错的,把这里的static去掉就可以了
  5.           void ziDemo(){
  6.               System.out.println(num);
  7.               }
  8.          }
  9.      }
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

12 个回复

正序浏览
定义在局部的静态内部类就把它看成是局部变量,你想想局部变量有被static修饰的吗

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 精辟的解释

查看全部评分

回复 使用道具 举报
我的这个问题刚才思索了一下,明白了,static是成员修饰符,这个局部内部类不在成员位置上自然不能用static所修饰。OK
还是要谢两位。
回复 使用道具 举报
gulup 发表于 2013-8-27 23:16
哥们。。楼上的兄弟没说内部类不能用static声明啊。。他是说局部内部类不能。。
...

嗯,是的,我的问题也正是为这个而来的,为什么不能,原理是什么?
回复 使用道具 举报
gulup 中级黑马 2013-8-27 23:16:55
10#
王广亚 发表于 2013-8-27 23:10
嗯,类名首字母自然要大写,只是在写子类时我疏忽了。咱们俩还是不要在这个问题上争执,毕竟我问的不是这 ...

哥们。。楼上的兄弟没说内部类不能用static声明啊。。他是说局部内部类不能。。
回复 使用道具 举报
べPNヤ 发表于 2013-8-27 23:06
内部类成员被static修饰 内部类的确要被static修饰 ,但是 不是局部类不类

en .这就对了,你看我的问题。现在来回答看看能不能帮我解决这个问题。呵呵{:soso_e100:}
回复 使用道具 举报
べPNヤ 发表于 2013-8-27 23:00
我简单的总结说下吧,局部内部类不能被static public 修饰,信不信你自己试下 Demo()方法是成员方法当然 ...

嗯,类名首字母自然要大写,只是在写子类时我疏忽了。咱们俩还是不要在这个问题上争执,毕竟我问的不是这个问题。我来举个例子来证明内部类是可以被static修饰的好吧,你把代码复制了运行一下看有没有问题。就拿我这个题我改一下:
  1. class Fu{
  2.       static int num=3;
  3.       static class Zi{
  4.          static void ziDemo(){
  5.                   System.out.println(num);
  6.                   }
  7.         }
  8. }
复制代码
这个代码你可以把Zi类前的static去掉别的不要动,看看他是不是会编译错误好吧。你也上一个代码,来说服我好吧。OK

回复 使用道具 举报
内部类成员被static修饰 内部类的确要被static修饰 ,但是 不是局部类不类
回复 使用道具 举报
本帖最后由 べPNヤ 于 2013-8-27 23:04 编辑
王广亚 发表于 2013-8-27 22:54
如果局部内部类不可以被static修饰的话,我要是在这个局部内部类中写一个静态的方法呢?这样是不是编译就 ...


我简单的总结说下吧,局部内部类不能被static public 修饰,信不信你自己试下 Demo()方法是成员方法当然可以被static修饰,定义在方法里面的局部内部类 class zi 是不能被static public 修饰的 ,还有 按照行业规则 类名首字母大写后面的单词也是首字母大写。
回复 使用道具 举报
べPNヤ 发表于 2013-8-27 22:50
Demo() 方法可以用static 修饰 但是局部内部类不行啊

如果局部内部类不可以被static修饰的话,我要是在这个局部内部类中写一个静态的方法呢?这样是不是编译就错了啊!
你这个地方需要再好好看一下查缺补漏一下。首先我先说一下static是可以修饰内部类的,而且当内部类中有个静态的成员是这个内部类必须是静态的。

回复 使用道具 举报
王广亚 发表于 2013-8-27 22:42
在这里Demo()不是成员方法吗?

Demo() 方法可以用static 修饰 但是局部内部类不行啊
回复 使用道具 举报
べPNヤ 发表于 2013-8-27 22:34
static 是修饰成员变量或成员方法的,所以不能用static修饰,public 也不行

在这里Demo()不是成员方法吗?
回复 使用道具 举报
本帖最后由 べPNヤ 于 2013-8-27 23:01 编辑

static 是修饰成员变量或成员方法的,所以局部内部类不能用static修饰,public 也不行

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马