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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈立凯 中级黑马   /  2014-6-18 11:43  /  1340 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态成员为何无法调用非静态成员?
以下是教程的一个例子:
class Outer
{
    private  int x=3;

    static class Inner
    {
        void function()
        {   
            System.out.println("inner:"+x);
        }   
    }
}
若主函数调用function方法,内部类输出x值前面隐藏了一个引用Outer.this。而此时内部类为静态,其x前是否也有隐藏的引用Outer.this?
因为看视频没听明白,故此询问各位。谢谢!

8 个回复

正序浏览
静态类Inner在外部类Outer被实例化前就加载进内存中了,这个时候你怎么调用Outer中的属性呢?outer根本就还没实例化,
回复 使用道具 举报
逛楼学习     
回复 使用道具 举报
看看。。。。。。。
回复 使用道具 举报
是的,就是因为隐藏了Outer.this,而static里面不可能出现this(因为static会在类加载时加载,那时代表对象的this还没有加载,所以static里面不可能出现this),所以会报错!
回复 使用道具 举报
陈立凯 发表于 2014-6-18 16:28
在内存中似乎如何体现的?

因为被static 修饰了。所以 x和Inner应该都在内存中的常量区开辟内存空间。function方法调用x时,x是内部成员变量,所以Outer可以省略不写。

回复 使用道具 举报
唐坚 发表于 2014-6-18 13:21
this关键字不可能出现在static修饰的地方出现。因为static修饰成员先加载。
上面的代码编译有问题:
privat ...

在内存中似乎如何体现的?
回复 使用道具 举报
路过看看。。。。。。。。。。。。。。。。。。。
回复 使用道具 举报
this关键字不可能出现在static修饰的地方出现。因为static修饰成员先加载。
上面的代码编译有问题:
private static int x =3; x也必须静态的。 如果你要调用成员变量x,此时function()方法体内省略 了 Outer.x;
也就是 System.out.println("inner:"+x); == System.out.println("inner:"Outer.x);


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