比如
class A{
public void testMethod(){
//方法体
}
}现在有2个线程,去调用这个方法:class MyThread extends Thread{ public void run(){ (new A()).testmethod();
}public void main(String[] args){
Thread thread1 = new MyThread ();
Thread thread2 = new MyThread ();
thread1.start();
thread2.start();
}
}
则thread1,thread2取得到testMethod()这个函数的地址一样吗?为什么?
如果把testMethod()定义成static,结果是不是也一样呢?
为什么?
那如果一样,还要static干什么呢?
有没有static表明这个方法是类的还是对象的,即要不要new一个,相对来说static速度快一点,因为不用调new.
但涉及到线程同步的时候,一般会用非static的。
多线程使用static成员的时候,获取不互斥,修改时互斥,这样应该没问题吧
现在的问题是,
是不是不管加不加static,函数testMethod的地址是不是类A被JVM载入后,就确定了?
一样的,代码都在方法区内,只有一份,这个是不是static没关系。
static属性在方法区中也只有一份。
非static属性在每一个对象中都有一份。
我想主要是为了“共享”。一段static资源(变量,函数)可以被程序中的其它代码共享。而不加static就不一样了,不加static必须依赖某一个对象才行。 所以函数加不加static就是类与对象的区别。 类是静态的,而对象则是动态的。 那么我们时候用static呢?