黑马程序员技术交流社区

标题: static修饰变量 在此处具体作用 [打印本页]

作者: lucien_he    时间: 2015-5-22 18:02
标题: static修饰变量 在此处具体作用
如题  此处 static 修饰了 变量 tick
百度解释: 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
我理解在此处五个线程对tick 共同调用  是他们的共享变量  是否正确?求指教
public class piao extends Thread{
        private static int piao = 100;
        public void run(){
                while(true){
                        if(piao > 0){
                                System.out.println(Thread.currentThread().getName()+"...sale"+piao--);
                        }
                }
        }
}

public class test10 {
        public static void main(String[] args) {
                piao p1 = new piao();
                piao p2 = new piao();
                piao p3 = new piao();
                piao p4 = new piao();
                piao p5 = new piao();
               
                p1.start();
                p2.start();
                p3.start();
                p4.start();
                p5.start();
        }
}




作者: 466273082    时间: 2015-5-22 20:19
static在此处就是做一个数据共享,让5个线程都可以共享一个数据,这样才能出现多个窗口卖100张票的效果
作者: 大西洋    时间: 2015-5-22 20:26
静态之后,就不会动态变化,可以这样理解么??
作者: 流水0215    时间: 2015-5-22 20:36
大西洋 发表于 2015-5-22 20:26
静态之后,就不会动态变化,可以这样理解么??

应该不能这样说,但是这样理解的话应该是没有问题的
作者: lucien_he    时间: 2015-5-22 20:37
466273082 发表于 2015-5-22 20:19
static在此处就是做一个数据共享,让5个线程都可以共享一个数据,这样才能出现多个窗口卖100张票的效果 ...

恩恩  那还有别的用处么?以前 没这么用过所以第一次看 很陌生
作者: 大西洋    时间: 2015-5-22 20:39
流水0215 发表于 2015-5-22 20:36
应该不能这样说,但是这样理解的话应该是没有问题的

感谢大神 :D
作者: lucien_he    时间: 2015-5-22 20:44
大西洋 发表于 2015-5-22 20:26
静态之后,就不会动态变化,可以这样理解么??

静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。

对于你的理解
从百度的解释来说  只是存储方式改变了  没说 不能动态变化     还是可以调用的啊   不是不能用了
作者: lucien_he    时间: 2015-5-22 20:46
流水0215 发表于 2015-5-22 20:36
应该不能这样说,但是这样理解的话应该是没有问题的

能详细说说么 ? 我不是很理解你们说的
作者: 流水0215    时间: 2015-5-22 21:02
lucien_he 发表于 2015-5-22 20:46
能详细说说么 ? 我不是很理解你们说的

这个你查的百度已经比较详细了,自己可以好好思考一下。被static修饰的成员变量,就可以被类的所有实例所共享,用的时候直接使用即可,无需创建对象。
作者: 郭.威    时间: 2015-5-22 21:31
就是每个对象都具备同一个方法
作者: 白水丶    时间: 2015-5-22 21:39
static在这里你可以认为就是他们的共享数据
作者: shuadianqian8    时间: 2015-5-22 22:28
芽儿    !!!!!!!!!!!!!!!!!!!!!!!!!!!
作者: 定格在永远    时间: 2015-5-22 22:36
用static的两种情形,一是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。二是,希望某个方法不与包含它的任何对象关联在一起。也就是,即使没有创建对象,也能够调用这个方法。




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