黑马程序员技术交流社区
标题:
内部类
[打印本页]
作者:
陈希然
时间:
2011-9-24 11:13
标题:
内部类
为什么非静态内部类里不能有静态成员
作者:
匿名
时间:
2011-9-24 11:24
你去看下这帖子
[url]http://bbs.itheima.com/viewthread.jsp?tid=302&highlight=%E5%86%85%E9%83%A8%E7%B1%BB%2B[/url]
希望有帮助
作者:
匿名
时间:
2011-9-24 11:39
标题:
回复 楼主 的帖子
首先,这个是Java语言规范规定的内容。其次,你可以想象一下如何去指向这个静态成员。非静态内部类是通过外部类的this指针指向的。那么对于非静态内部类的动态成员,可以通过两个this指针确定位置。但是如果允许静态成员会出现什么情况?首先,静态成员是不能通过任何this指针的,但是为了确定这个成员,必须确定这个成员所在的类实例。但是这个实例必须通过一个this指针确定。这在语法以及处理上都会造成很大的麻烦。
由于Java 中的静态成员可以不用类的对象实例就可以被访问,定义为类的内部类如果不是声明为静态的内部类,那么创建外部类的实例对象的时候就会一起初始化内部类,既然非静态的内部类无论如何都一定会被初始化,那么静态成员就没有任何意义了。希望对你有所帮助!
作者:
匿名
时间:
2011-9-24 12:39
楼上说的还是很有道理的,我说一下我的理解。
一个类中定义静态成员的意义是不用创建对象,可以直接通过类名访问,对于一个类中的非静态内部类,我觉得可以把它理解为类的一个非静态成员,因为它不能通过类名访问,需要创建外部类的对象才可以访问到,也就是说要访问内部类中的成员必须创建外部类的对象,如果这时定义静态成员也不能通过类名(外部类类名+内部类类名)直接访问,没有了静态成员的作用,也就毫无意义了。所以……
作者:
匿名
时间:
2011-9-24 13:28
静态成员的好处就在于不用声明类的实例而直接使用类名访问,假设要访问非静态内部类里的静态成员,由于是非静态内部类,那么必须先声明外部类的实例才行,内部类也会被初始化,这时刚才说到的静态成员的好处就体现不出来了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2