java为什么非静态内部类中不能有static修饰的属性,但却可以有常量?

如题所述

第1个回答  2020-02-22
说深入点吧,java类加载顺序,首先加载类,执行static变量初始化,接下来执行对象的创建,如果我们要执行代码中的变量int
a
初始化,那么必须先执行加载外部类,再加载内部类,最后初始化静态变量
a
,问题就出在加载内部类上面,我们可以把内部类看成外部类的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载内部类必须在实例化外部类之后完成
,java虚拟机要求所有的静态变量必须在对象创建之前完成,这样便产生了矛盾。
(有点绕,呵呵)
而java常量放在内存中常量池,它的机制与变量是不同的,编译时,加载常量是不需要加载类的,所以就没有上面那种矛盾。
其实常量使用是很随意的,内部类,静态内部类,匿名内部类就乱了。
但了解JVM特性你就知道有些地方为什么不让你这么用了。

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网