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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈希然 黑马帝   /  2011-9-24 11:13  /  2120 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么非静态内部类里不能有静态成员

评分

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

查看全部评分

5 个回复

正序浏览
黑马网友  发表于 2011-9-24 16:12:20
地板
我还不知道这个呢,记住了,哈哈
回复 使用道具 举报
黑马网友  发表于 2011-9-24 13:28:23
报纸
静态成员的好处就在于不用声明类的实例而直接使用类名访问,假设要访问非静态内部类里的静态成员,由于是非静态内部类,那么必须先声明外部类的实例才行,内部类也会被初始化,这时刚才说到的静态成员的好处就体现不出来了

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 加分鼓励!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-24 12:39:23
板凳
楼上说的还是很有道理的,我说一下我的理解。
一个类中定义静态成员的意义是不用创建对象,可以直接通过类名访问,对于一个类中的非静态内部类,我觉得可以把它理解为类的一个非静态成员,因为它不能通过类名访问,需要创建外部类的对象才可以访问到,也就是说要访问内部类中的成员必须创建外部类的对象,如果这时定义静态成员也不能通过类名(外部类类名+内部类类名)直接访问,没有了静态成员的作用,也就毫无意义了。所以……

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-24 11:39:48
藤椅

回复 楼主 的帖子

首先,这个是Java语言规范规定的内容。其次,你可以想象一下如何去指向这个静态成员。非静态内部类是通过外部类的this指针指向的。那么对于非静态内部类的动态成员,可以通过两个this指针确定位置。但是如果允许静态成员会出现什么情况?首先,静态成员是不能通过任何this指针的,但是为了确定这个成员,必须确定这个成员所在的类实例。但是这个实例必须通过一个this指针确定。这在语法以及处理上都会造成很大的麻烦。
由于Java 中的静态成员可以不用类的对象实例就可以被访问,定义为类的内部类如果不是声明为静态的内部类,那么创建外部类的实例对象的时候就会一起初始化内部类,既然非静态的内部类无论如何都一定会被初始化,那么静态成员就没有任何意义了。希望对你有所帮助!

评分

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

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-24 11:24:45
沙发
你去看下这帖子
[url]http://bbs.itheima.com/viewthread.jsp?tid=302&highlight=%E5%86%85%E9%83%A8%E7%B1%BB%2B[/url]
希望有帮助

评分

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

查看全部评分

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