黑马程序员技术交流社区

标题: 一个关于静态的疑问 [打印本页]

作者: 李平    时间: 2012-4-18 22:19
标题: 一个关于静态的疑问
class  ThreadDemo2
{
public static void main(String[] args)
{
  Ticked t1 = new Ticked();
  Ticked t2 = new Ticked();
  Ticked t3 = new Ticked();
  Ticked t4 = new Ticked();
  t1.start();
  t2.start();
  t3.start();
  t4.start();
}
}
class Ticked extends Thread
{
private static int tick=100;//为什么加静态???
public void run()
{
  while(true)
  {
   if(tick>0)
      System.out.println(Thread.currentThread().getName()+"sale..."+tick--);
   else
    break;
  }
}
}

这个地方加静态是不是因为:4个线程需要调用的票数总共为100,所以不管谁用,用一个就少一个,这是一个数据。存放于共享区中。
所以以后共用的数据是不是都要加上静态?

作者: 胡生蒙    时间: 2012-4-18 22:32
Java类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,有些时候可以认为是全局变量。因此在某些时候为了节省系统内存开销、共享资源,可以将类中的一些变量声明为静态变量,通过下面的例子
Java代码
  public class WeekA{
      static class Data {
      private int week;
      private String name;
     Data(int i, String s) {
    week= i;
    name = s;
    }
   }
    Data weeks[] = {
     new Data(1, "Monday"), new Data(2, "Tuesay"), new Data(3, "Wednesday"), new Data(4, "Thursday"), new Data(5, "Friday"), new Data(6, "Saturday"), new                  Data(7, "Sunday")
                     
  };
  public static void main(String args[]) {
      final int N = 10000;
      WeekA weekinstance;
      for (int i = 1; i <= N; i++){
      weekinstance = new WeekA ();
      }
  }
 }
作者: 王永旺    时间: 2012-4-18 22:33
如果不加静态,就会产生四个对象,当然就不对啦。所以必须要加静态的。




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