Java Static关键字 笔记

通常来说,当创建类时,就是在描述那个类的对象的外观与行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。
–摘自《Thinking in Java》

有两种情况用上述方法是无法解决的:
1、只需为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。
2、希望某个方法不予包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用这个方法。

通过static关键字可以满足这两方面的需要。当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。

使用方法: 只须将static关键字放在定义之前,就可以将字段或方法设定为static。例如:

Class StaticTest{
	static int i=47;
}

现在,即使你创建了两个StaticTest对象,StaticTest.i也只有一份存储空间,这两个对象共享同一个i。

StaticTest str1=new StaticTest();
StaticTest str2=new StaticTest();

在这里,str1.i 和str2.i指向同一存储空间,因此它们具有相同的值47

引用static变量有两种方法,可以通过一个对象去定位他,如str2.i; 也可以通过其类名直接引用

	StaticTest.i++;

使用类名是引用static变量的首选方式,这不仅是因为它强调了变量的static结构,而且在某些情况下他还为编辑器进行优化提供了更好的机会。

类似逻辑也应用于静态方法。既可以像其他方法一样,通过一个对象来引用某个静态方法,也可以通过特殊的语法形式ClassName.method()加以引用。定义静态方法的方式也与定义静态变量的方式相似

class Incrementavle{
	static void increment(){
	StaticTest.i++;
}
}

可以采用

		Incrementtable sf =new Incrementable();
		sf.increment();

或者

Incrementable.increment();

尽管当static作用于某个字段时,肯定会改变数据创建的方式(因为一个static字段对每个类来说都只有一份存储空间,而非static字段对每个对象有一个存储空间),但如果static用于某个方法,差别却没有那么大。static方法的一个重要用法就是在不创建任何对象的前提下就可以调用它。

未完待续…

猜你喜欢

转载自blog.csdn.net/zonkidd/article/details/83961174