静态方法能访问静态的成员变量,也能调用静态的方法。但是静态方法不能访问成员变量,也不能调用非静态的方法,那么每个程序都是通过public static void main(String args[])进入,那么每个方法前面不应该都有static修饰符吗?不理解,求解决,本人菜鸟!!
class person
{ int age;
  String name;
  void shut()
 {
  System.out.println("my name is"+name);
 }
 public static void main(String[] args)
{
 person Tom=new person();
 Tom.age=23;
 Tom.name="Tom";
 Tom.shut();
}
}
为什么在主函数中,能调用非静态方法(Tom.shut());

解决方案 »

  1.   

    那是创建了person对象Tom去调用该方法,并不是直接去调用。
      

  2.   

    public static void main(String[] args)
    {
      shut();//这样的话是直接调用,是不可以的,下边的是通过创建了对象,由对象去调用这个方法了
     person Tom=new person();
     Tom.age=23;
     Tom.name="Tom";
     Tom.shut();
    }
      

  3.   

    因为Tom是对象,他不是person的成员
      

  4.   

    静态变量静态方法,在一个类中只有一份 ,在类加载时,jvm把它加载初始化到类的静态数据区域 ,而成员变量是只有类实例化的时候才进行初始化所以 静态方法静态变量 ,当然不能访问成员变量啦 ,因为类加载时,还没有成员变量成员方法;
      

  5.   

    person Tom=new person();
    创建了他的对象,以这个对象调用的
      

  6.   

    你好,前两天刚刚麻烦过你,我想再打扰一下,就是关于那个static的用法的问题,现在整的我脑袋都有点大了,程序的执行顺序,它不是先执行主函数吗,在这里既然已经在主函数中创建了对象,也就是说已经有了具体的成员方法和成员变量,为什么static还不能调用呢,谢谢,求解决! 
     public class wan {
    static int a; 
    int b; 
    static void print() 
    {System.out.println(b); 
    print1(); 

    void print1() {
    System.out.println("这是一个非静态的方法"); 


    class text
    { public static void main(String args[])
    { wan w=new wan(); 
    wan.a=1; 
    w.print(); 
    }
    }
    回复 取消.