黑马程序员技术交流社区
标题:
关于线程售票例子的一点疑问
[打印本页]
作者:
周俊波
时间:
2014-5-22 15:31
标题:
关于线程售票例子的一点疑问
在下面的例子中,用到了static修饰票数,说明是静态的,我知道静态的东西不属于对象,但是new了4个对象以后4个对象共享这个k,那么这个静态值是属于谁的呢? 属于mian的 还是属于Ticket类的,要是属于Ticket类的,但是new了4次,是第一次new的时候给k分配空间,还是怎么的?我有点凌乱了..........
class Ticket extends Thread {
static int k = 100;
public void run() {
while(true) {
if(k <= 0) {
break;
}
System.out.println(currentThread().getName() + ".....出售:" + k--);
}
}
}
public class Test06 {
public static void main(String[] args) {
Ticket t1 = new Ticket();
Ticket t2 = new Ticket();
Ticket t3 = new Ticket();
Ticket t4 = new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
复制代码
作者:
never615
时间:
2014-5-22 15:38
应该是第一次new的时候分配空间,属于所有new的对象的。被static修饰了,在存储空间存在方法区,就像这个k,创建以后就在那里了,然后乱七八糟怎么调用都是操作的这个k。
作者:
Sevenette
时间:
2014-5-22 19:49
静态是在第一次执行方法的时候就加载进了静态区,并且只加载一次
之后再怎么new都是在使用静态区的k;
它是属于ticket类的啊,但是和new了几次没有关系。只加载一次0.0
作者:
周俊波
时间:
2014-5-22 19:50
Sevenette 发表于 2014-5-22 19:49
静态是在第一次执行方法的时候就加载进了静态区,并且只加载一次
之后再怎么new都是在使用静态区的k;
它是 ...
的确,我仔细去百度终于弄清了 谢了啊
作者:
BigKarel
时间:
2014-5-22 22:09
static 修饰的类变量存在于方法区(共享区),相当于将ticket全局共享
作者:
gentleman
时间:
2014-5-24 08:10
静态成员在共享区,优先于对象,所以不属于哪个对象,并且和new对象没关系
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2