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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高浩 中级黑马   /  2013-1-16 20:50  /  1699 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为啥内部类中的成员静态化后,内部类就也需要被静态修饰呢?

4 个回复

正序浏览
在执行类加载过程中,如果内部类有静态方法,那么就是先加载外部类静态成员,再加载内部类静态成员,可是内部类如果不是外部类的静态成员,那么jvm怎么加载内部类的静态成员呢?
简单点说,就是虚拟机必须先得到父亲,才能加载静态儿子

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
你要结合起来看,既然叫内部类就肯定有一个外部类,不管你这个内部类在外部类的什么等级位置上(成员函数和成员变量、成员函数里面),你内部类的成员static后内部类不static,那么外部类对象通过调用方法的方式访问内部类,就会出错。被static修饰可是存放在方法区的,是和类加载一个优先级的,外部类调用内部类相当于外部类对象调用它的方法一样,方法是调用时加载,结果发现方法还不存在就有了一个变量了,这不是优先级错误吗?

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9 赞一个!

查看全部评分

回复 使用道具 举报
因为内部类不能有静态声明!为啥?

试想一下,内部类中的成员被静态修饰了,而且静态成员变量的优先级很高,随着类的加载而加载,你在有创建外部类的时候,你说这个静态成员怎么办?它要随着类的加载而加载,但是你的内部类却不是静态的?这不就出错了?所以内部类不能有静态的成员变量,但是静态内部类却可以有非静态的成员变量!

评分

参与人数 1黑马币 +9 收起 理由
黄锦成 + 9 赞一个!

查看全部评分

回复 使用道具 举报
类成员就相当于 一个方法成员,一个方法被static修饰后,就不能访问非静态的属性和方法,换成内部类的一个类成员,被static修饰后,只能访问外部类的static修饰成员
建议LZ好好看基础视频....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马