黑马程序员技术交流社区

标题: 内部类不能声明静态成员,怎么理解? [打印本页]

作者: 光sail    时间: 2012-4-22 15:17
标题: 内部类不能声明静态成员,怎么理解?
内部类不能声明静态成员,怎么理解?

class fileinfo{

public String filename;

public int index;

static public int total;

public int size;

}


提示错误信息如下:

The field total cannot be declared static; static fields can only be declared in static or top level types

作者: 乞文超    时间: 2012-4-22 15:53
你可以理解为 静态成员是在编译的时候静态的初始化
而在非静态内部类里面创建静态成员,是无法在编译阶段完成的
你可以想象,要初始化这个静态成员必须要创建外部类对象,因为内部类不是静态的,一定要创建外部类对象才能使用这个内部类,而创建对象这个步骤是在运行时创建而不是编译时能创建的

解决的话要将这个内部类声明为静态的
作者: 孙天    时间: 2012-4-23 21:25
内部类成员静态化,相当于外部类进内存成员就进了内存,要调用非静态的方法,而内部类随着类的加载而加载了,就不需要对象了,直接拿类调用就可以了,所以成员静态没有意义了没有意义
作者: 王敏NO.09    时间: 2012-4-23 22:13
当内部类中定义了静态成员,该内部类必须是static的,当外部类中的静态方法访问内部类时,内部类也必须是static。
作者: suiabing    时间: 2012-4-23 22:27
首先我们要搞清楚静态的特点,然后内部类也就自然而然的明白了。毕老师的那个视频讲得已经很清楚了,我做了一个笔记你看下

特点:
    是一个修饰符,用于修饰成员
    静态修饰的成员被所有对象所共享,存储的是共享数据,而非静态存储的是对象特有数据
    静态优先于对象存在,因为static的成员随着类的加载就已经存在
    静态修饰的成员可以用类名.静态变量直接调用
注意事项:
    静态方法只能访问静态成员(非静态方法既可以访问静态也可以访问非静态)
    静态方法不可以使用this和super关键词
    主函数是静态的  


对于内部类来说,他也是一个外部类的成员,只不过这个成员是一个类,和普通成员么有什么区别。咱们想一下,如果内部类可以声名,那么我们就可以使用类名直接调用了。但是这个类被隐藏在了外部类中,是不存在的。只有调用者创建了这个外部类并且调用了这个成员(也就是内部类)才可以使用的。
哦了,加分!!!!



作者: 韩新凯    时间: 2012-4-23 22:36
static特点:
1.随着类的加载而加载。
   也就是说,静态类会随着类的消失而消失。说明它的生命周期最长。
2.优先于对象存在。
    明确一点:静态是先存在,对象是后存在的。
3.被所有对象所共享。
4.可以直接被类名所调用。




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