1
class a 

a A=new a(); 
a() { 

void c() { 

}
 class b 
{
a B; 
void f() 
{ B.c(); 
       } 
public static void main(String[] args)
              
{ b test = new b();//这是初始创建的对象
b n;               //
n.f();             //这样为什么不行
   }
  }
2
class a 

a A=new a(); 
a() { 

void c() { 

}
 class b 
{
 void f() 
{ a B;  //这样也不行
 B.c(); 
       } 
public static void main(String[] args)
              
{ b  = new b();
 test.f();             
   }
  }
3
class a 

a() { 
   } 
void c() { 
    } 
}
 class b 
{
 void f() 
{ a A=new a();
  a B;  //这样还不行
 B.c(); 
       } 
public static void main(String[] args)
              
{ b  = new b();
 test.f();             
   }
  }
反正以上都是报错
只有把a 的引用放到所有的方法之外 非静态的方法才能用对象的引用去调用方法
在静态的方法中还不能建立个引用去调用方法 只能是用 创建的对象去调用这又是为什么?为什么非静态的就能用引用去调用方法呢?而且引用一定要在个方法之外呢?

解决方案 »

  1.   

    晕,看得头晕晕的
    看得进度和你差不多,试着回答你一下问题,不知道对不对
    第一个问题
    class a 

    a A=new a(); 
    a() { 

    void c() { 

    }
     class b 
    {
    a B; 
    void f() 
    { B.c(); 
           } 
    public static void main(String[] args)
                  
    { b test = new b();//这是初始创建的对象
    b n;               //
    n.f();             //这样为什么不行  在静态方法中调用实例方法,必须要创建一个对象能调用,而你这里之是申明了一个变量,所以错误。
       }
      }
      

  2.   

    第二个问题是没有实例化
    之所以你把a B放所有函数外和函数内是有区别的,放函数内系统是不初始化的,所以报错,而放函数外的化,在执行任何一个class之前,系统会把所有的实例变量初始化。
      

  3.   

    第一个问题,n没有初始化,也就无法调用方法f();而class b 中的B是类成员,程序自动初始化;
    第二个问题,和上面的差不多,B不属于类成员了,也就是说没法自动初始化造成;
    第三个问题,和第二个问题一样
      

  4.   

    其实仔细看看,三个问题都差不多
    JAVA编程思想 第二版 P157页
    里面有个初始化顺序 
      

  5.   

    class a 

    a() { 
       } 
    void c() { 
        } 
    }
     class b 
    {a B; 
     void f() 
    { a A=new a();
       
     B.c(); 
           } 
    public static void main(String[] args)
                  
    { b test = new b();
     test.f();             
       }
      }
    楼上的按照你的说法我这样写了也通过了 这又怎么解释,a A=new a();也是在方法中也没初始化,但是一样可以用他的引用去调用方法
      

  6.   

    楼上的按照你的说法我这样写了也通过了 这又怎么解释,a A=new a();也是在方法中也没初始化
    你是指什么没有初始化??
      

  7.   

    a A=new a();这个已经就初始化了哦调用构造函数了
      

  8.   

    a A=new a();创建对象我也是写在了方法里按照你的说法
    之所以你把a B放所有函数外和函数内是有区别的,放函数内系统是不初始化的,所以报错,而放函数外的化,在执行任何一个class之前,系统会把所有的实例变量初始化
    也就是说a A=new a();没有被初始话,但为什么通过了。 而把引用放入方法将a A=new a();放到方法之外为什么就不行了呢 ?
      

  9.   

    之所以你把a B放所有函数外和函数内是有区别的,放函数内系统是不初始化的,所以报错,而放函数外的化,在执行任何一个class之前,系统会把所有的实例变量初始化你这句话说对了呵呵