本帖最后由 官文昌 于 2012-8-17 23:48 编辑
class Ticket extends Thread
{
private static int tick=100;//首先纠正楼主的一个错误观点,一个变量不是加上static就是全局变量。全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪
// 一个函数,它属于一个源程序文件。其作用域是整个源程序。全局变量和局部变量只是作用范围不同。这里加上了static,那这个变量就变成了静态变量,静态变量的一个
//特点就是所用的对象都共享这个变量,当其中一个对象改变了这个变量值,那这个变量的值也就改变了。(我们可以用代码来验证)
public void run()
{
while(tick>0)
System.out.println(currentThread().getName()+"...."+tick--);
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();
t1.start();
t2.start();
t3.start();
t4.start();
}
}
验证代码:
public class TestDemo
{
public static void main(String[] args)
{
Test t1=new Test();
t1.run();
Test t2=new Test();
t2.run();
}
}
class Test
{
int i=10;
//static int i=10;
public void run()
{
i++;
System.out.println(i);
}
}
当我们没有加static时,打印结果是:11
11
当我们加了static时,打印结果就变成了:11
12
总结:
静态变量
我们在编写一个类时,本质上是在描述其对象的属性和行为。而没有产生实质上的对象时,程序是不会分配内存空间的。只有通过NEW关键字才会产生出对象,这时,系统才会分配内存空间,方法也可以供给外部调用。 有时候,希望无论是否产生对象或无论产生多少个对象的情况下。某些特定的数据在内存中只有一份。比如:王雷是个对象,有一个属性,年纪,一个方法,写字方法,满洁是另一个对象,有一个属性,年纪,一个方法,讲话方法,但是,无论是王雷还是满洁,都有一个共同的属性,即国别是中国人。那么,此二人共享国别这一属性。不必分别给此二人都单独分配一个国别属性的内存空间了。我们称这种共享变量为静态成员变量。在变量类型前面加上static 关键字即可。 静态变量在内存空间中只有一份,所有对象都共享这一份变量。 可以直接使用类名来访问静态变量,还可以在类的非静态方法中像访问其它非静态变量一样去访问静态变量,甚至不需要产生类的实例对象,只需要类名就可以引用了。
希望对你有帮助~~~~ |