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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯瑞君老师 黑马粉丝团   /  2011-12-18 11:30  /  3598 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义了100张票要卖,我开了3个窗口,结果相当于卖了300张票,我看毕老师的视频说是定义成静态的就行了 ,我不明白为什么?求助详解!

12 个回复

倒序浏览
宋双 黑马帝 2011-12-18 11:33:31
沙发
定义成静态就表示这部分数据被共享了,等于100张票被共享到3个窗口来卖了
回复 使用道具 举报
t_mac 黑马帝 2011-12-18 11:38:36
藤椅
静态成员变量:   位于“数据区”,无论多少个对象该变量在内存中都只有一份,
如果你把它定义为static 也就是共享了你的100张票,三个窗口都来卖这100张,不会出现每个窗口都卖100张票 的情况
回复 使用道具 举报
不定义成静态就相当于三个窗口每个窗口都有100张票。 静态之后这个100就是共享数据了。相当于三个窗口总共卖100张票。
回复 使用道具 举报
刘健 黑马帝 2011-12-18 11:49:08
报纸
定义成静态表示这个变量可以被线程共享
回复 使用道具 举报
如果定义成静态,则所有对象共享一个变量。  因为静态随着类的加载而加载,在定义对象之前就已经存在了,所以创建对象,不会再重复创建这个变量,直接使用了,且使用的都是同一个
回复 使用道具 举报
曾运 黑马帝 2011-12-18 22:26:03
7#
用static修饰该变量后, 该变量为全局共享变量,意思是3个售票窗口共享100张的票,当A窗口卖了一张后,B窗口出售的时候得到的票是99张的 而不是100张,如果不是static修饰该变量,那么每个窗口都出售100张票,总共的票数就是300了,而不是100.
回复 使用道具 举报
黄达标 黑马帝 2011-12-19 00:31:26
8#
定义成静态的,三个窗口共享这个静态数据,对象创建之前就已经随类加载。
比如,窗口1执行一次完毕,100变成99;然后切换到窗口2,窗口2就从99开始执行,而不是从100开始,不会重复之前的100了;以此类推。
回复 使用道具 举报
刘基军 黑马帝 2011-12-19 09:53:55
9#
1.Static关键字,修饰变量或方法后,即为静态变量或方法,是属于类的;
2.静态变量的初始化,是在加载main()方法之前进行的,所以当后面进行创建对象,所有的对象都是使用这一个变量(共享这个静态变量)。
  1. class Test
  2. {
  3.         static int i = 100;

  4.   public static void main(String[] args)
  5.   {
  6.           Test t1 = new Test();
  7.           t1.i--; //也可写成:Test.i--
  8.           System.out.println(t1.i);
  9.          
  10.           Test t2 = new Test();        
  11.     System.out.println(t2.i);

  12.     //测试结果:
  13.     //99
  14.     //99
  15.   }
  16. }
复制代码
回复 使用道具 举报
刘博 黑马帝 2011-12-19 10:41:30
10#
静态是说这数据被所有的共享,也就是说,不管你开几个窗口,都共享这100张票
回复 使用道具 举报
杨强 黑马帝 2011-12-19 11:44:52
11#
把变量定义成静态,所有类会共享这个静态变量,一个线程卖了一张 这个静态变量-1 这样就保证开多少线程卖的都是100张票
回复 使用道具 举报
郝锡强 黑马帝 2011-12-19 12:24:27
12#
非要这样可以通过接口完成
回复 使用道具 举报
Static 后,多个窗口相当于多个线程,共享100张票,其实用接口更好!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马