黑马程序员技术交流社区

标题: 关于多线程买票静态的用法问题 [打印本页]

作者: 一个铃,一颗珠    时间: 2013-8-7 11:25
标题: 关于多线程买票静态的用法问题
本帖最后由 杨兴庭 于 2013-8-7 17:58 编辑

public class SellTicket extends Thread {
private static int tickets=1000;
public void run(){
  while(tickets>0){
   System.out.println(currentThread().getName()+"sell:"+tickets);
   tickets--;
  }
}
public static void main(String[] args) {
  SellTicket sellTicket = new SellTicket();
  SellTicket sellTicket2 = new SellTicket();
  SellTicket sellTicket3 = new SellTicket();
  sellTicket.start();
  sellTicket2.start();
  sellTicket3.start();
}
}
private static int tickets=1000; 为什么用静态能卖的票没有重复的 ?

作者: 李政    时间: 2013-8-7 12:24
静态的一个特点,也是优点,就是能被多个对象共享这个数据  

如果不加静态 就是每个对象中都一个ticket这么一个变量

加了静态,这个变量就会放入静态区中,被这个类的多个对象所共享,
比如a对象修改了ticket的值,在b对象中得到的ticket的值也会改变

作者: 草帽    时间: 2013-8-7 14:38
通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共同拥有一个static变量。无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。
Static基本规则:
(1)一个类的静态方法只能访问静态属性。
(2)一个类的静态方法不能直接调用非静态方法。
(3)如果访问权限允许,static属性和方法可以使用对象加’.’方式调用,当然也可以使用实例加’.’方式调用。
(4)静态方法中不存在当前对象,所以不能使用this,当然也不能使用super。
(5)静态方法不能被非静态方法覆盖。
(6)构造方法不允许被声明为static的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2