黑马程序员技术交流社区

标题: 请问有没有定义在局部的静态内部类?答案是否定的,但..... [打印本页]

作者: 王广亚    时间: 2013-8-27 22:29
标题: 请问有没有定义在局部的静态内部类?答案是否定的,但.....
本帖最后由 王广亚 于 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. }
复制代码

作者: べPNヤ    时间: 2013-8-27 22:34
本帖最后由 べPNヤ 于 2013-8-27 23:01 编辑

static 是修饰成员变量或成员方法的,所以局部内部类不能用static修饰,public 也不行
作者: 王广亚    时间: 2013-8-27 22:42
べPNヤ 发表于 2013-8-27 22:34
static 是修饰成员变量或成员方法的,所以不能用static修饰,public 也不行

在这里Demo()不是成员方法吗?

作者: べPNヤ    时间: 2013-8-27 22:50
王广亚 发表于 2013-8-27 22:42
在这里Demo()不是成员方法吗?

Demo() 方法可以用static 修饰 但是局部内部类不行啊

作者: 王广亚    时间: 2013-8-27 22:54
べPNヤ 发表于 2013-8-27 22:50
Demo() 方法可以用static 修饰 但是局部内部类不行啊

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


作者: べPNヤ    时间: 2013-8-27 23:00
本帖最后由 べPNヤ 于 2013-8-27 23:04 编辑
王广亚 发表于 2013-8-27 22:54
如果局部内部类不可以被static修饰的话,我要是在这个局部内部类中写一个静态的方法呢?这样是不是编译就 ...


我简单的总结说下吧,局部内部类不能被static public 修饰,信不信你自己试下 Demo()方法是成员方法当然可以被static修饰,定义在方法里面的局部内部类 class zi 是不能被static public 修饰的 ,还有 按照行业规则 类名首字母大写后面的单词也是首字母大写。
作者: べPNヤ    时间: 2013-8-27 23:06
内部类成员被static修饰 内部类的确要被static修饰 ,但是 不是局部类不类
作者: 王广亚    时间: 2013-8-27 23:10
べ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


作者: 王广亚    时间: 2013-8-27 23:14
べPNヤ 发表于 2013-8-27 23:06
内部类成员被static修饰 内部类的确要被static修饰 ,但是 不是局部类不类

en .这就对了,你看我的问题。现在来回答看看能不能帮我解决这个问题。呵呵{:soso_e100:}

作者: gulup    时间: 2013-8-27 23:16
王广亚 发表于 2013-8-27 23:10
嗯,类名首字母自然要大写,只是在写子类时我疏忽了。咱们俩还是不要在这个问题上争执,毕竟我问的不是这 ...

哥们。。楼上的兄弟没说内部类不能用static声明啊。。他是说局部内部类不能。。

作者: 王广亚    时间: 2013-8-27 23:20
gulup 发表于 2013-8-27 23:16
哥们。。楼上的兄弟没说内部类不能用static声明啊。。他是说局部内部类不能。。
...

嗯,是的,我的问题也正是为这个而来的,为什么不能,原理是什么?

作者: 王广亚    时间: 2013-8-27 23:22
我的这个问题刚才思索了一下,明白了,static是成员修饰符,这个局部内部类不在成员位置上自然不能用static所修饰。OK
还是要谢两位。
作者: 泡沫之夏    时间: 2013-8-28 01:51
定义在局部的静态内部类就把它看成是局部变量,你想想局部变量有被static修饰的吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2