黑马程序员技术交流社区

标题: 内部类为何不能有静态成员? [打印本页]

作者: jxlovqqvo    时间: 2014-12-19 18:11
标题: 内部类为何不能有静态成员?
内部类也是一个类,而静态修饰的成员都可以用  类名.方法  来用,为何这里不行?毕老师视频只说了内部类不能有静态的成员,可是没说为啥,谁能告诉我谢谢了

  1. class Outer{
  2.        
  3.         int x = 2;
  4.        
  5.         class Inner{
  6.                 //这里show方法为何不能是静态的
  7.                 public void show(){
  8.                        
  9.                         System.out.println("inner:"+x);
  10.                 }
  11.                
  12.         }
  13.        
  14.        
  15.        
  16. }
复制代码

作者: lwj123    时间: 2014-12-19 19:08
内部类可以有静态成员,有静态成员的内部类必须是静态的
作者: huoxy    时间: 2014-12-19 19:23
定义在成员位置的内部类可以有静态成员,此时内部类也必须是静态的!定义在局部(方法内)的内部类不能由static修饰,所以也不能有静态成员。
作者: jxlovqqvo    时间: 2014-12-19 19:28
huoxy 发表于 2014-12-19 19:23
定义在成员位置的内部类可以有静态成员,此时内部类也必须是静态的!定义在局部(方法内)的内部类不能由st ...

能不能说说原因
作者: huoxy    时间: 2014-12-19 19:33
jxlovqqvo 发表于 2014-12-19 19:28
能不能说说原因

当成Java语言规则记的。具体原因也不了解,有些东西没必要深究,会用即可。
作者: 小猪快跑    时间: 2014-12-19 20:52
非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
1、static类型的属性和方法,在类加载的时候就会存在于内存中。
2、要使用某个类的static属性或者方法,那么这个类必须要加载到jvm中。
基于以上两点,可以看出,如果一个非static的内部类如果具有static的属性或者方法,那么就会出现一种情况:内部类未加载,但是却试图在内存中创建static的属性和方法,这当然是错误的。原因:类还不存在,但却希望操作它的属性和方法。
作者: hello_csu    时间: 2014-12-19 21:57
楼主问题存在问题,如果内部类中含有静态成员,那么内部类本身也应该申明为静态的。
作者: I空空    时间: 2014-12-19 22:25
内部类其实也是一个成员而已
作者: Honelyboy    时间: 2014-12-19 22:41
内部类可以有静态成员的,但是这个内部类也必须是静态的。
作者: qowoeo7538    时间: 2014-12-19 23:12
类不加载,何来方法?
作者: 飞跃离开    时间: 2014-12-19 23:15
内存分配导致的
作者: jxlovqqvo    时间: 2014-12-20 02:24
小猪快跑 发表于 2014-12-19 20:52
非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
1、static ...

明白了,多谢。我自己也想到这个问题了,但是把静态想成了没加载就存在了所以没转过弯了
作者: 逆世界ylm    时间: 2014-12-20 16:03
好多大神,受教了
作者: 没伞的孩子    时间: 2014-12-20 16:11
我感觉也应该是可以有的,只不过都得是静态的




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