public class A{  public static int testMethod(){
   return 1;
}
}与public class A{  public  int testMethod(){
   return 1;
}
}假设我现在要调用方法testMethod.
public class B{  public void main(String[] args){    A.testMethod();

  ( new A()).testMethod(); 有何不同呢?}
}
希望从JVM底层解释。

解决方案 »

  1.   

    呵呵,你是不是刚从C或C++转学JAVA啊
      

  2.   

    如果方法没有使用到任何实例属性,也就是任何时候调用这个方法都能返回正确的结果,那么你应该用类方法而不是实例方法,也就是使用static的静态方法。判断起来很简单,你把除了这个方法的其它所有非static的方法和属性全部删除,你的方法能正常运行吗?
      

  3.   

    Java里面何时采用静态(static)方法?如何判断?
      

  4.   

    很少会有人从底层出发考虑是否要用static的吧…………
      

  5.   


    静态方法是可以在程序中用类名点出来的,就是说不需要实例化
    但是在程序一开始就初始化好了。
    但是还真不知道什么时候该用静态的。
    比如我们的某个方法频繁用到?
    请老紫竹赐教!再问一个:main方法为什么一定是static类型的?
      

  6.   

    static 对象共享的时候就用static啊。
      

  7.   

    static 对象共享的时候就用static啊。这个好像不对吧?如果是多线程会出现问题的!
      

  8.   


    多线程有问题,你难道不会自己同步啊?
    或者说有问题 你不能不用static啊?没说一定要在多线程用?
      

  9.   

    静态方法的方法地址在内存中有固定的地址存放,因此可以使用类名直接调用。而非静态方法类信息中只保存了一个方法指针的偏移地址,只有在对象产生时,
    即首地址确定时才能确定非静态方法的实际地址,因此非静态方法只能通过对
    象进行调用。静态方法是常驻内存的,而非静态方法会跟对象一起被垃圾回收器回收掉。至于 main 方法为什么要是 static 的,这是因此 main 方法所在的类 JVM 并
    不会去为它产生对象,而运行时 JVM 规定了去找 main 方法的方法指针进行定
    位并运行。
      

  10.   

    类加载后就有特定的地址了,
       只是JAVA规定非静态要对象才能调,那样调用方法时同时给的要操作的对象。
      如果没个对象都有特定的方法,那不内存爆了,
      

  11.   

    如果是静态static,属于类级成员的,由类名调用,不用创建对象。即类名.方法名();
    如果没有static,即非静态,要先创建对象,再用对象名.方法名();
      

  12.   

    有没有Static只是在调用的时候有区别
      

  13.   

     对象的方法的地址应该是事先确定的呀,为什么呢,
    因为JVM载入一个类的时候,类的方法的代码已经是加载进来的,因此方法的代码也是保存到静态存储区了的,所以当调用对象的方法时,应该是转到静态存储区的方法的代码的首地址。 
      

  14.   

    加static的方法或者属性,可以由类直接调用(当然也可以又对象调用),没有static的只能由对象调用
    静态方法只能调用静态属性,非静态方法可以调用静态属性
      

  15.   

    其实就一个问题:
    static方法的地址是一定的,存储在静态存储区,
    如果没有加static的方法,是不是new一个对象后,编译器会把把这个方法的代码调入内存,并分配地址??
      

  16.   

    static在调用时很方便,可以越类...
      

  17.   

    调用方便,把一些辅助类啊,工具类啊里面的方法写成静态的
    比如Math类,还有Collections……
      

  18.   

    static类在加载的过程中就已经分配内存,直到程序结束,所以static类是非常占用内存的,如果使用频率不是非常高的类建议不要使用。
      

  19.   

    只有在执行过程中才稍有不同,每个非static方法对每个对象都有独立的栈桢,从而保证各个对象的数据独立性,而static只有一个栈桢,这也就是为什么static容易出现脏读的原因。
      

  20.   

    那为什么不是每个方法都用static呢 该在何时何地运用static呢?
      

  21.   

    我记得我以前的部门经理曾说过一句话“没有充足的理由,不要用static”.-----特别是在需要同步的时候。
    static方法,我用的最多的就是在单实例模式下。
      

  22.   

    谢谢各位的回答,我总结一下吧。对于一个函数,加不加static,它的地址都是一样的。JVM在载入类后,会把函数分配固定的地址。所以加不加static函数的地址是一样的。所以二者在都是需要考虑同步的问题。那JAVA之父为什么要提出static呢?
    我想主要是为了“共享”。一段static资源(变量,函数)可以被程序中的其它代码共享。而不加static就不一样了,不加static必须依赖某一个对象才行。所以函数加不加static就是类与对象的区别。 类是静态的,而对象则是动态的。那么我们时候用static呢?
    很简单,需要共享的时候,就用static吧。