黑马程序员技术交流社区

标题: 静态无法调用非静态问题 [打印本页]

作者: 陈立凯    时间: 2014-6-18 11:43
标题: 静态无法调用非静态问题
静态成员为何无法调用非静态成员?
以下是教程的一个例子:
class Outer
{
    private  int x=3;

    static class Inner
    {
        void function()
        {   
            System.out.println("inner:"+x);
        }   
    }
}
若主函数调用function方法,内部类输出x值前面隐藏了一个引用Outer.this。而此时内部类为静态,其x前是否也有隐藏的引用Outer.this?
因为看视频没听明白,故此询问各位。谢谢!
作者: 唐坚    时间: 2014-6-18 13:21
this关键字不可能出现在static修饰的地方出现。因为static修饰成员先加载。
上面的代码编译有问题:
private static int x =3; x也必须静态的。 如果你要调用成员变量x,此时function()方法体内省略 了 Outer.x;
也就是 System.out.println("inner:"+x); == System.out.println("inner:"Outer.x);



作者: Wokno    时间: 2014-6-18 15:18
路过看看。。。。。。。。。。。。。。。。。。。
作者: 陈立凯    时间: 2014-6-18 16:28
唐坚 发表于 2014-6-18 13:21
this关键字不可能出现在static修饰的地方出现。因为static修饰成员先加载。
上面的代码编译有问题:
privat ...

在内存中似乎如何体现的?
作者: 唐坚    时间: 2014-6-18 17:30
陈立凯 发表于 2014-6-18 16:28
在内存中似乎如何体现的?

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


作者: gyw520gyw    时间: 2014-6-18 22:35
是的,就是因为隐藏了Outer.this,而static里面不可能出现this(因为static会在类加载时加载,那时代表对象的this还没有加载,所以static里面不可能出现this),所以会报错!
作者: 但愿''专注..    时间: 2014-6-18 23:27
看看。。。。。。。
作者: ╭月牙湾湾╮    时间: 2014-6-19 00:06
逛楼学习     
作者: 千里一醉    时间: 2014-6-21 22:40
静态类Inner在外部类Outer被实例化前就加载进内存中了,这个时候你怎么调用Outer中的属性呢?outer根本就还没实例化,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2