class A
{
   int a;
   static int b;
   void f(int x,int y)
   {
       a=x;//合法
       b=y;//合法
   }
   static void g(int z)
    {
         b=23;//合法
         a=z;//非法
    } 
}
谁帮忙解释下为何a=z非法啊

解决方案 »

  1.   

    a是实例变量,静态方法不能直接使用实例变量,需要通过对象来使用。
    你可以先A a1=new A()的方式实例化A类,然后用 a1.a=z;的方式给变量赋值。
    这是基础噢,看来你java还没学好,继续看书,多多练习。
      

  2.   

    因为static里面的东西被初始化的时候还没有你的a
    不存在这个东西你叫人家怎么赋值??
      

  3.   

    语法基础。static静态方法是这个类的方法。
    你可以这么理解,既然它是类的方法,那么它可以不创建对象而直接通过类名.静态变量名直接访问(这种情况下要求这个静态变量为公有变量)。
    既然它那么它可以不创建对象而访问,那么有可能还没有实例化对象就这样访问了,此时在静态方法内访问实例变量是没有意义的,故编译器会报错。
    简单的说就是:静态方法只能调用其它静态方法,访问静态变量,而不能调用非静态方法,不能访问非静态变量!
      

  4.   

    A a1=new A();
    a1.a = z;同一楼,接分了。
      

  5.   

    静态块中的东西也要是静态的,不需要实例化先。int a是需要实例化才能创建的,所以a=z错了。 
      

  6.   

    static void g(int z)
        {
             b=23;//合法
             a=z;//非法
        } 
    }