黑马程序员技术交流社区

标题: Java内部类调用 [打印本页]

作者: 轻松过关    时间: 2012-11-30 22:49
标题: Java内部类调用
Java内部类调用
1、        静态类中不能调用动态的方法、动态成员变量、动态类。但可以调用动态类中的静态方法。
2、        非静态内部类当中不能定义静态变量和静态的方法,但可以定义常量。
3、        内部类当中不能声明静态的方法(除非这个内部类也是一个静态类),静态的方法只能被声明在顶级类中。
4、        只有静态的内部类中的静态方法才能被外面的类的静态方法直接调用。
5、        静态类内部的动态方法和成员变量,必须在new静态类对象后才能调用。


为什么非静态内部类中不能定义静态的变量呢?
为什么在某个类中不能实例化其他类中的内部类?
为什么内部类中的内部类不能是静态的?

作者: 冯盼    时间: 2012-11-30 23:16
1.因为内部类本来就可以访问外部类的成员,调用如果可以在内部类中定义静态成员那么和在外部类中定义是一样的,反而容易产生歧义。
2.可以只是不同于一般类的实例化:实例化的外部类名.new 内部类名。
3.(个人理解)一般定义内部类是需要访问外部类成员的,而静态是随着.class文件加载而加载的,此时,外部类的非静态数据还未加载。
作者: tfy    时间: 2012-11-30 23:20
 在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。不过由于种种的原因,如使用上的限制等等因素(具体的使用限制,笔者在下面的内容中会详细阐述),在实际工作中用的并不是很多。但是并不是说其没有价值。在某些特殊的情况下,少了这个静态内部类还真是不行。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。而且最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。这对于代码测试是非常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。为此,这个静态内部类虽然不怎么常用,但是程序开发人员还必须要掌握它。也许在某个关键的时刻,其还可以发挥巨大的作用也说不定。




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