class outer
{
private int index=100;
class inner
{
private int index=50;
void print()
{
System.out.println(index);
System.out.println(this.index);
System.out.println(outer.this.index);
}
}
void print()
{
inner in=new inner();
in.print();
}
inner getinner()
{
return new inner();
}
}class testouter
{
public static void main(String[] arg)
{
outer out=new outer();
outer.inner in=outer.getinner();
}
}
为什么提示D:\java\outer.java:30: 无法从静态上下文中引用非静态 方法 getinner()
outer.inner in=outer.getinner();
                    ^

解决方案 »

  1.   

    改为outer.inner in=out.getinner();
      

  2.   

    问题分析:        outer out=new outer();
           outer.inner in=outer.getinner();
    你这样写, 是想这样调用吧
            outer.inner in=out.getinner();
    注意:
    outer   out 
    所以建议类名才用大写形式。修改成这样就可以了 class outer
    {
        private int index=100;
        class inner
        {
            private int index=50;
            void print()
            {
                System.out.println(index);
                System.out.println(this.index);
                System.out.println(outer.this.index);
            }
        }
        void print()
        {
            inner in=new inner();
            in.print();
        }
        inner getinner()
        {
            return new inner();
        }
    }class testouter
    {
        public static void main(String[] arg)
        {
            outer out=new outer();
            outer.inner in=outer.getinner();
        }
    }
      

  3.   

    outer.inner in=outer.getinner(); 
    改成
    outer.inner in=out.getinner(); 
      

  4.   

    谢谢,的确是这样,可是,为什么,我这段视频上,他也是用的outer.getinner(),他却可以运行啊?
    郁闷了
      

  5.   

    class outer
    {
        private int index=100;
        class inner
        {
            public int index=50;      //这里把private改为public
            void print()
            {
                System.out.println(index);
                System.out.println(this.index);
                System.out.println(outer.this.index);
            }
        }
        void print()
        {
            inner in=new inner();
            in.print();
        }
        inner getinner()
        {
         return new inner();
        }
    }public class testouter
    {
        public static void main(String[] arg)
        {
            outer out=new outer();
         outer.inner in = out.getinner();       //调用成员方法要用类对象
         System.out.println(in.index);          //得到index的值
         in.print();  //调用成员方法print()
        }
    }