class a{
   int x=1,y=2;
   void f(){
     final int x=5;
     int z=3;
     b c=new b();
     c.f1();
     class b{
     public void f1(){
     System.out.print(x);
     System.out.print(a.this.x);
     System.out.print(y);}}
   }
}class b{
  public static void main(String a[]){
   a c=new a();
   c.f();
  }
}红色那行为什么他说找不到f1()啊```

解决方案 »

  1.   

    ?什么意思??
    即使把main的那个类改成c也不行啊
      

  2.   

    ?什么意思??
    即使把main的那个类改成c也不行啊
      

  3.   

    b c=new b(); 
    调用此行代码时,方法f()内部的class b尚未被定义,因此,此时new的b对象为外部的class b对象
      

  4.   

    又有点不明白了
    class a{
       int x=1,y=2;
       void f(){
         final int x=5;
         int z=3;
         b c=new b();
         class b{
         public void f1(){
         System.out.print(x);
         System.out.print(a.this.x);
         System.out.print(y);
          }
         }
         c.f1();
       }}
    class b{
      public static void main(String a[]){
       a c=new a();
       c.f();
      }
    }
     
    上面这样是通过不了编译的
    但为什么把    c.f1(); 这句给去掉就可以通过编译了呢
      

  5.   

    下面那个b类写得有点模糊 你可以把下面那个class b改成cclass a{ 
      int x=1,y=2; 
      void f(){ 
        final int x=5; 
        int z=3; 
        b c=new b(); 
        class b{ 
        public void f1(){ 
        System.out.print(x); 
        System.out.print(a.this.x); 
        System.out.print(y); 
          } 
        } 
        c.f1(); 
      } } 
    class c{ 
      public static void main(String a[]){ 
      a c=new a(); 
      c.f(); 
      } 
    } 上面这样是通过不了编译的 
    但为什么把    c.f1(); 这句给去掉就可以通过编译了呢
      

  6.   

    楼主试下 将b c=new b(); 和c.f1(); 这两条语句都写在f()方面里面class b定义的后面就能找到了,也能打印成功。楼主先前的主要原因是你定义的那个b类对象如果在f()方面里面class b前的话,编译器会默认从外面找(方面里面的代码在内存中栈形式组织的,是顺序执行,和类的加载方式不同),这个时候就自然而然找不到方法f1(),就会报错. 
      

  7.   

    楼主试下 将b c=new b(); 和c.f1(); 这两条语句都写在f()方面里面class b定义的后面就能找到了,也能打印成功。楼主先前的主要原因是你定义的那个b类对象如果在f()方面里面class b前的话,编译器会默认从外面找(方面里面的代码在内存中栈形式组织的,是顺序执行,和类的加载方式不同),这个时候就自然而然找不到方法f1(),就会报错. 
      

  8.   

    楼主试下 将b c=new b(); 和c.f1(); 这两条语句都写在f()方面里面class b定义的后面就能找到了,也能打印成功。楼主先前的主要原因是你定义的那个b类对象如果在f()方面里面class b前的话,编译器会默认从外面找(方面里面的代码在内存中是以栈形式组织的,是顺序执行,和类的加载方式不同),这个时候就自然而然找不到方法f1(),就会报错. 
      

  9.   


    "那个b类对象如果在f()方面里面class b前"啥意思?
      

  10.   

    class a{
      int x=1,y=2;
      void f(){
        final int x=5;
        int z=3;
        class b{
        public void f1(){
        System.out.print(x);
        System.out.print(a.this.x);
        System.out.print(y);}}
      }
        b c=new b();
        c.f1();
    }class b{
      public static void main(String a[]){
      a c=new a();
      c.f();
      }

    ls的ls是这意思吧?
      

  11.   

    class a{
      int x=1,y=2;
      void f(){
        final int x=5;
        int z=3;
        class b{
        public void f1(){
        System.out.print(x);
        System.out.print(a.this.x);
        System.out.print(y);}}    b c=new b();
        c.f1();

      }
    }class b{
      public static void main(String a[]){
      a c=new a();
      c.f();
      }
    }
    应该f()里面,放错地方了...
      

  12.   

    class a{ 
      int x=1,y=2; 
      void f(){ 
        final int x=5; 
        int z=3; 
        b c=new b(); 
        class b{ 
        public void f1(){ 
        System.out.print(x); 
        System.out.print(a.this.x); 
        System.out.print(y); 
          } 
        } 
        c.f1(); 
      } } 
    class c{ 
      public static void main(String a[]){ 
      a c=new a(); 
      c.f(); 
      } 
    } 想问的是 上面这样不可以通过编译
    但是把c.f1(); 去掉为什么就可以通过编译了呢?