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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨康 中级黑马   /  2012-5-23 04:16  /  1911 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当一个类中的内部类想访问外部类时,内部类可以直接访问外部类中的成员,包括私有成员。
而外部类想访问内部类成员,是通过建立内部类的对象才能访问。
我想知道的是 如果内部类的成员定义成了static,外部类能不能访问内部类中被static修饰的成员,如果能是通过怎样的形式访问的?如果不能,是为什么?

3 个回复

倒序浏览
本帖最后由 杨尧 于 2012-5-23 07:32 编辑

我想知道的是 如果内部类的成员定义成了static,外部类能不能访问内部类中被static修饰的成员,如果能是通过怎样的形式访问的?如果不能,是为什么?
当然能了,只要被static修饰的变量就是公共的,他不属于任何对象,他存在方法区
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
可以,访问方式:外部类名.内部类名.成员方法();.
回复 使用道具 举报
首先非静态内部类是不能有静态成员的,对于java类加载顺序:首先加载类,执行static变量初始化,接下来执行对象的创建。
如果我们要执行代码中的变量初始化,那么必须先执行加载外部类,再加载内部类,最后初始化静态变量。
   我们可以把内部类看成外部类的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载内部类必须在实例化外部类之后完成 ,java虚拟机要求所有的静态变量必须在对象创建之前完成,这样便产生了矛盾。
静态内部类实际上已经脱离了外部类的控制,创建对象时也不再需要外部类对象的存在,实质上只是一个放置在别的类中的普通类而已。Outer.Inner.function();

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马