小弟刚接触java,问一个小问题?外部类成员位置访问静态内部类的非静态成员,怎么访问?

解决方案 »

  1.   

    你需要创建静态内部类的对象,才能访问静态内部类的非静态成员。public class Test {
    String test;

    public void setTest(){
    Test1 t=new Test1();
    test=t.test1;
    }

    public String getTest(){
    Test1 t=new Test1();
    return t.test1;
    }

    static class Test1{
    String test1="Hello world";
    public  String getTest1(){
    String s=new String("Hello world from static class");
    return s;
    }
    }
    }
    静态类只是说,这个类归属于外不类,而不归属于外部类对象,并且内存中是存储在静态代码区。你可以通过外部类访问内部类,再访问内部类的静态成员,也就只有静态内部类的静态成员可以通过Outerclass.Innerclass.staticMember方式访问,如果静态内部类拥有非静态成员,那这个成员本身就归属于静态内部类的对象,静态内部类对象需要手动创建,然后就可以通过InnerclassObject.NonStaticMember方式访问。所以,无论在外部类还是在main函数里面,访问一个类的静态内部类的非静态成员,按照上述代码,则需Test.Test1 t=new Test.Test1();t.getTest1()。
    具体的应用,兄弟你可以去研究下google protocol buffer的架构,它自动生成的java代码有很多都是通过静态内部类来实现的。
      

  2.   

    任何非静态成员都属于对象,而不是类。
    因此你想访问这个内部类的非静态成员,必须创建内部类对象。内部类也是一种属性,他是静态的,那么他就属性类,这里内部类是静态的,他术语外部类,而不是外部对象。因此可以通过这样访问:OutClass.StaticInerClass staticInerObject = new OutClass.StaticInerClass();//获得静态内部类对象
    systerm.out.println(staticObject.ordinaryProperty.toString());打印内部类的非静态成员
      

  3.   

    new一个该静态类部类的对象就可以访问。
      

  4.   

    是不是静态类的非静态成员是private