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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

局部内部类为什么不能定义静态变量?

13 个回复

倒序浏览
如果要定义静态变量,内部类也必须是静态的,所以内部类也要用static修饰
回复 使用道具 举报
因为外部类不一定是静态的,如果外部类是非静态的内部类就需要创建外部类再来调用变量,这时矛盾出现了,如果内部类定义了静态变量是可以类名.调用的,那么你到底能不能调用呢
回复 使用道具 举报
这个问题好 我也想知道
回复 使用道具 举报
北极的男娃 发表于 2015-11-8 21:36
因为外部类不一定是静态的,如果外部类是非静态的内部类就需要创建外部类再来调用变量,这时矛盾出现了,如 ...

外部类能用static修饰?
回复 使用道具 举报
北极的男娃 发表于 2015-11-8 21:36
因为外部类不一定是静态的,如果外部类是非静态的内部类就需要创建外部类再来调用变量,这时矛盾出现了,如 ...

没看大懂0.0怎么办?
回复 使用道具 举报
内部类的生命周期和方法中的局部变量是不一样的,内部类是也是一个类,是存储在堆中,也只有当对该类的引用消失时,内部类才会消亡。而方法的局部变量是存储在堆栈中的,当调用结束时就会退栈,即在内存中这个属性就消失了。也就是说,内部类的生命周期超过了方法中局部变量的生命周期,内部类可能会调用到已经消失的属性,因此内部类不能访问方法中的局部变量。 解决方法就是在局部变量前加修饰符final ,此时局部变量就会存在堆中,生命周期跟工程的生命周期是一样的,此时内部类就可以访问方法中的局部变量。
回复 使用道具 举报
局部内部类和实例内部类一致,不能包含静态成员,这是因为静态属性是在加载类的时候创建,这个时候内部类还没有被创建.
回复 使用道具 举报
问错了,是非静态内部类为啥不能定义静态变量。看晕了
回复 使用道具 举报
黑夜中那颗星 发表于 2015-11-8 22:01
外部类能用static修饰?

我说错了 外部类不能用static 内部类可以   非静态内部类不能有静态成员,因为他需要外部的实例(也就是对象)来实例化。但是静态内部类可以有静态成员,但是静态内部类只能访问外部类的静态成员
回复 使用道具 举报
北极的男娃 发表于 2015-11-8 22:44
我说错了 外部类不能用static 内部类可以   非静态内部类不能有静态成员,因为他需要外部的实例(也就是 ...

为什么呢,一直没搞懂。内部类相当于外部类的一个成员,内部类的静态变量会随着内部类的加载而加载,随着内部类的消失而消失,这样理解对吗?
回复 使用道具 举报
孙建志 发表于 2015-11-9 21:06
为什么呢,一直没搞懂。内部类相当于外部类的一个成员,内部类的静态变量会随着内部类的加载而加载,随着 ...

但是  你什么时候加载内部类呢    你需要外部类调用内部类的时候内部类的.class文件才会加载进方法区
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马