A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周俊波 中级黑马   /  2014-5-22 15:31  /  1305 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在下面的例子中,用到了static修饰票数,说明是静态的,我知道静态的东西不属于对象,但是new了4个对象以后4个对象共享这个k,那么这个静态值是属于谁的呢? 属于mian的 还是属于Ticket类的,要是属于Ticket类的,但是new了4次,是第一次new的时候给k分配空间,还是怎么的?我有点凌乱了..........
  1. class Ticket extends Thread {       
  2.        
  3.         static int k = 100;
  4.         public void run() {
  5.                 while(true) {
  6.                         if(k <= 0) {
  7.                                 break;
  8.                         }
  9.                         System.out.println(currentThread().getName() + ".....出售:" + k--);
  10.                 }
  11.         }
  12. }

  13. public class Test06 {
  14.         public static void main(String[] args) {
  15.                 Ticket t1 = new Ticket();
  16.                 Ticket t2 = new Ticket();
  17.                 Ticket t3 = new Ticket();
  18.                 Ticket t4 = new Ticket();
  19.                 t1.start();
  20.                 t2.start();
  21.                 t3.start();
  22.                 t4.start();
  23.         }
  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

5 个回复

倒序浏览
应该是第一次new的时候分配空间,属于所有new的对象的。被static修饰了,在存储空间存在方法区,就像这个k,创建以后就在那里了,然后乱七八糟怎么调用都是操作的这个k。
回复 使用道具 举报
静态是在第一次执行方法的时候就加载进了静态区,并且只加载一次
之后再怎么new都是在使用静态区的k;
它是属于ticket类的啊,但是和new了几次没有关系。只加载一次0.0

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
Sevenette 发表于 2014-5-22 19:49
静态是在第一次执行方法的时候就加载进了静态区,并且只加载一次
之后再怎么new都是在使用静态区的k;
它是 ...

的确,我仔细去百度终于弄清了 谢了啊
回复 使用道具 举报
static 修饰的类变量存在于方法区(共享区),相当于将ticket全局共享
回复 使用道具 举报
静态成员在共享区,优先于对象,所以不属于哪个对象,并且和new对象没关系
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马