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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jxlovqqvo 中级黑马   /  2014-12-19 18:11  /  1918 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类也是一个类,而静态修饰的成员都可以用  类名.方法  来用,为何这里不行?毕老师视频只说了内部类不能有静态的成员,可是没说为啥,谁能告诉我谢谢了

  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. }
复制代码

评分

参与人数 1黑马币 +2 收起 理由
杨佳名 + 2

查看全部评分

13 个回复

倒序浏览
内部类可以有静态成员,有静态成员的内部类必须是静态的
回复 使用道具 举报
定义在成员位置的内部类可以有静态成员,此时内部类也必须是静态的!定义在局部(方法内)的内部类不能由static修饰,所以也不能有静态成员。
回复 使用道具 举报
huoxy 发表于 2014-12-19 19:23
定义在成员位置的内部类可以有静态成员,此时内部类也必须是静态的!定义在局部(方法内)的内部类不能由st ...

能不能说说原因
回复 使用道具 举报

当成Java语言规则记的。具体原因也不了解,有些东西没必要深究,会用即可。
回复 使用道具 举报
非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
1、static类型的属性和方法,在类加载的时候就会存在于内存中。
2、要使用某个类的static属性或者方法,那么这个类必须要加载到jvm中。
基于以上两点,可以看出,如果一个非static的内部类如果具有static的属性或者方法,那么就会出现一种情况:内部类未加载,但是却试图在内存中创建static的属性和方法,这当然是错误的。原因:类还不存在,但却希望操作它的属性和方法。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
楼主问题存在问题,如果内部类中含有静态成员,那么内部类本身也应该申明为静态的。
回复 使用道具 举报
I空空 中级黑马 2014-12-19 22:25:53
8#
内部类其实也是一个成员而已
回复 使用道具 举报
内部类可以有静态成员的,但是这个内部类也必须是静态的。
回复 使用道具 举报
类不加载,何来方法?
回复 使用道具 举报
内存分配导致的
回复 使用道具 举报
小猪快跑 发表于 2014-12-19 20:52
非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。
1、static ...

明白了,多谢。我自己也想到这个问题了,但是把静态想成了没加载就存在了所以没转过弯了
回复 使用道具 举报
好多大神,受教了
回复 使用道具 举报
我感觉也应该是可以有的,只不过都得是静态的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马