一切都是对象之构建一个Java程序(三)static关键字

static关键字
  通常来说,当创建类时,就是在描述那个类的duix的外观与行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据存储空间才被分配,其方法才供外界调用。
  用两种情形用上述方法是无法解决的,一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象。另一种情形是,希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即使没有创建对象,也能够调用这个方法。
  通过static关键字可以满足这两方面的需要,当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域,通常,你必须创建一个对象,并用它来访问数据或方法,因为非static域和方法必须知道他们一起运作的特定对象。
  有些面向对象语言采用类数据和类方法两个术语,代表那些数据和方法只是作为整个类,而不是类的某个特定对象而存在的。有时,一些Java文献里也用到这两个术语。
  只需将static关键字放在定义之前,就可以将字段或方法设定为static。例如,下面的代码就生成了一个static字段,并对其进行了初始化:

			class StaticTest {
				static int i = 47;
			}

      现在,即使你创建了两个StaticTest对象,StaticTest.i也只有一份存储空间,这两个对象共享一个i。再看看下面代码:

			StaticTest st1 = new  StaticTest();
			StaticTest st2 = new StaticTest();

      在这里,st1.i和st2.i指向同一存储空间,因此他们具有相同的值47.
  引用static变量有两种方法。如前例所示,可以通过一个对象去定位它,如st2.i;也可以通过其类名直接引用,而这对于非静态成员则不行。

			StaticTest.i++;

      其中,++运行符对变量进行递加操作。此时,st1.i和st2.i仍具有相同的值48.
  使用类名是引用static变量的首选方式,这不仅是因为它强调了变量的static结构,而且在某些情况下它还为编译器进行优化提供了更好地机会。
  类似逻辑也应用于静态方法。既可以像其他方法一样,通过一个对象来引用某个静态方法,也可以通过特殊的语法形态ClassName.method()加以引用。定义静态方法的方法与定义静态变量的方式相似:

			Class Incrementable {
				static void increment() { StaticTest.i++;}
			}

      可以看到,Incrementable的incerement()方法通过++运算符将静态数据递加。可以采用典型的方式,通过对象来调用increment():

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

      或者,因为increment()是一个静态方法,所以也可以通过他的类直接调用:

			Incrementable.increment();

      尽管搭档static作用于某个字段时,肯定会改变数据创建的方式(因为一个static字段对每个类来说都只有一份存储空间,而非static字段则是对每个对象有一个存储空间),但是如果static作用于某个方法,差别却没有那么大。static方法的一个重要用法就是在不创建任何对象的前提下就可以调用它。正如我们将会看到那样,这一点对定义main()方法很重要,这个方法是运行一个应用时的入口点。
  和其他任何方法一样,static方法可以创建或使用与其类型相同的命名对象,因此,static方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钴60

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值