通过静态对象访问静态成员

时间:2017-10-29 05:17:53

标签: java static

它说,静态非常适合java中的静态。我正在尝试在那里实现小东西,我想使用内部静态类的实例仅为该特定实例更改外部类的静态变量值。我认为这是一个理想的案例。如果没有,请与我分享。此外,所有内部类都可以访问外部类的成员。

所以这是我的代码。

package org;

import org.Outerclass.innerclass;

public class Outerclass {

    static String name = "Europe";

    String getname() {

        return name;
    }

    public void setname(String name) {

        this.name = name;
        System.out.println(this.name);
    }

    void setstaticname() {

        Outerclass.innerclass i = new Outerclass.innerclass();
        i.name = "London"; // Error "name cannot be resolved or is not a field"   ?
        System.out.println(i.name);

    }

    static class innerclass {

        void updatename() {
            Outerclass o = new Outerclass();
            o.setname("USA");
        }

    }

    public static void main(String[] args) {

        innerclass p = new innerclass();
        System.out.println(p.name);   // Error "name cannot be resolved or is not a field" ?

    }

}

我尝试过两种方式,反之亦然但错误相同。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

nameOuterClass的成员。并且您正尝试使用innerclass实例访问它。这就是你得到这个错误的原因。

此处+ System.out.println(+p.name);是什么意思?

修改

从内部类中,您可以访问外部类static成员,如下所示:

name = "";

Outerclass.name = "";

+p.name更改为名称或OuterClass.name。 <{1}}内的+会给你另一个编译时错误。

System.out.println成员在对象级别不可用,它们在类级别可用。 static在编译时初始化,其中在运行时创建对象

答案 1 :(得分:0)

i.name应为Outerclass.name,因为nameOuterclass的成员,而不是innerclass

在您的代码中,iinnerclass的实例。