[code=Java]
 public class {
  public static void main(String[] args) {
      m1();
 }
  public static void m1() {
    m2();
    m3(); 
 }
  public static void m2() {}
  public static void m3() {}
}
[code]
为什么m1(),m2(),m3()上都要加上static呢?

解决方案 »

  1.   

    http://mxdxm.javaeye.com/blog/794832可以看下 有具体的解释
      

  2.   

    因为mian方法是静态的,调用非静态方法要先创建实例,然后才能调用该对象的方法 public class Test{
      public static void main(String[] args) {
      Test test = new Test();
      test.m1();
     }
      public void m1() {
      m2();
      m3();  
     }
      public void m2() {}
      public void m3() {}
    }
      

  3.   

    我觉得像你那么调用,是隐藏了东西的调用。不知道你能不能理解。
    这么说吧,我给你打个比方。
    在我们正常调用方法的时候,要先实例化一个类的对象。
    用对象去调用。对象名。方法名
    但是当在同一个类中,想相互调用方法。就要用this。方法名(前提是非静态方法)
    静态方法的调用要用类名。方法名。
    注意,这个类名是可以省略的。所以你上面的写的啊a();b();就没有错误。
    但是它的完整形式应该是 类名。静态方法名();
    当同一个类中非静态方法之间调用的时候,也可以写车啊a();b();
    这时候就应该是this.方法名();this表示当前对象。
    还要注意的就是非静态方法调用静态方法要用类名。方法名();
    不是不可以调用的。
      

  4.   

    因为你用的是直接调用,相当于是类级别的调用。并且main()方法的入口就是静态的
      

  5.   

    静态方法中不能直接调用非静态的方法为什么不能呢?
    用static 修饰的方法是类方法,类方法是提前加载的;而非静态的方法的调用是要在产生一个实例后才能调用,在加载静态方法时,并没有产生实例,所以就不能在静态方法里面调非静态方法。