class A 

  private int a; 
  ...... 
  public void fun() 
  {...} 
}
 
class B 

  public void main(String args[]) 
    { ... new A().fun();} 

B中的main方法调用A中的fun非得实例化A. 
那必须分配空间给A的数据域, 
大家不觉得这很浪费空间和执行时间吗?? 

解决方案 »

  1.   

    楼上不明白吗?
    我的意思是指,为了一个非静态方法,必须实例化类。
    这样无形中也必须给非静态域分配空间。
    我觉得是浪费。不知道JAVA设计的时候有没有考虑过这个问题。
      

  2.   

    If you want to invoke a method without creating an instance, please make the method a static method.
      

  3.   


    使用静态方法,public static methodname(){}
      

  4.   

    这个问题要看你为什么要创建类A,如果你只是调用fun()的话,你根本没必要创建它,直接把它写B的静态方法不就行了,觉得6楼说的有道理。
      

  5.   

    开辟空间了,但当你的实例化类失去引用时,不久垃圾回收了嘛
    比如:
    1:new A().fun();
    2:new A().fun(); 当执行完1,这个对象就被垃圾回收,内存中已经没有这个对象了,然后开始2
      

  6.   

    如果你希望fun()不需要创建A类的实例也可以用,那么就把它声明称static的,如果你的fun()方法操作了A的非静态成员变量,那它就不能是静态的,你也没有理由要求不为它操作的成员变量分配空间就使用它,那样它就没有可操作的数据了。
      

  7.   

    我把你的类A比作人类,现在你是main方法,也可以说是老板,你现在要用一个人为你办一件事,而这件事是人类中任意一个人都可以做到的,但是现在A还没有对象,也就没有你要的人,你必须要创建(准确说是招聘)一个人,他才能为你做一件事,这个招聘的过程就相当于创建了对象,这是必须的,没有人半不来事,所以没有对象,他的方法也用不了
      

  8.   

    new A().fun();当执行完会进行垃圾回收
    而如果作为静态方法则会长驻内存
      

  9.   

    个人觉得 如果全都是static看似不用创建信对象,但是消耗也不一定就小吧~
    哎~为什么什么问题都能难住我-。-#
      

  10.   

    6楼和11楼说的很好,是你自己用了不该用的编程方法,然后又怪Java设计者为什么不体贴你!
      

  11.   

    调用方法分为两种情况:
    1.方法是static的,这种情况下可以直接用类名来调用,不用实例化对象;
    2.方法不是static的,这种情况下就必须创建一个该类的对象,只有这样,才能完成调用方法的操作。
      否则的话,你不告诉JVM你想调用哪个类的方法就想调用该方法的话,那么从JVM的角度来看,JVM是不知道你到底要调用哪个方法的。