日期:2014-05-20  浏览次数:20686 次

静态方法和非静态方法有什么本质区别
如题,
比如在调用时内存方面的区别.

------解决方案--------------------
内存方面不清楚,不过如果A类调用B类的静态方法,直接通过B类的名称就可以了,不用调用对象,如果是调用的非静态方法,就一定得先创建一个对象。(当然能否调用还得考虑其它修饰符)
------解决方案--------------------
/* 个人理解,仅供参考 */
静态方法是独立于对象外的,但是它的局部变量还是在方法区中,不可能是在静态区中.
只是在加载方法是,静态方法会优先加载.像main方法就是必须先加载的.一个应用的开始必须先要执行main方法.


------解决方案--------------------
1.语法上区别
public string d() //非静态
public static string d()//静态

2.引用上的区别
非静态,必须先实例化,Class1 c1=new Class1; 才能通过c1.d()调用到方法
而静态,则不用。直接Class1.d()就可以

3.其它区别
好象没有了。用哪一个,这个关系似乎不大。看个人的习惯了。
------解决方案--------------------
二者的区别就是:静态方法是相对于类的,而非静态方法是相对于实例的
说个简单的例子吧
public class Test{

public static void a(){}

public void b(){}

}

那么在其他类中如果要使用静态a方法不用实例化就可以直接调用a方法 Test.a();
如果要调用b方法,必须要实例化 Test test=new Test(); test.b();

从以上也可以看出 静态方法中不能引用非静态成员变量

不管是静态方法还是非静态方法对于类来说是只有一份的,也就是说只初始化一次的
------解决方案--------------------
静态变量是存放在data segment 中的,而不在heap中。所有的同一个类的对象都共有这个变量。
而非静态变量不是的,每个对象都有对应于自己的变量,都存储在heap中。