我在主函数里调用公共类的其它函数(没用static修饰)时显示错误“无法从静态上下文中引用非静态方法”,但当我把方法放到另一个类中,创建对象再调用,却又没这样提示了,是不是说明“无法从静态上下文中引用非静态方法”这样的情况只是针对同一个类里面的?不在同一个类里面就不用考虑static的问题了?混乱了。

解决方案 »

  1.   

    我就会笨办法记:
    只要不是static修饰的方法,必须要通过对象进行引用。在非静态方法里,可能省略了(this)。在静态的方法里,看看有没有你这个方法所在类的对象。没有肯定报错。
      

  2.   

    楼主,你好。因为静态方法的调用不是通过实例对象进行的,所以在静态方法中没有this指针,不能访问所属类的非静态变量和方法,只能访问方法体内的局部变量、自己的参数和静态变量。所以你在在static的主函数里调用非static的方法时肯定报错。所以你把方法放到另一个类,创建对象再调用,不会出错,因为你这个方法不是静态的,即不是属于类的,而是属于具体的一个实例对象的,用对象调用那当然不会错咯!
      

  3.   

    只要记住这一点:
    用statci修饰的成员是属于类的,在static的方法里可以用类名直接调用;
    不用statci修饰的成员是属于具体实例对象的,需要用对象名调用,且在static的方法里不可以调用。