Static 关键字

通常来说,当你创建类时,就是在描述那个类的对象的外观与行为。除非你用 new 创建那
个类的对象,否则,你实际上并未获得任何东西执行 new 来创建对象时,数据存储空间
才被分配,其方法才供外界调用。
 
但是有两种情形,用上述方法是无法解决的。一种情形是,你只想为某特定数据分配一份存
储空间,而不去考虑究竟要创建多少对象,还是甚至根本就不创建任何对象。另一种情形是,
你希望某个方法不与包含它的类的任何对象关联在一起。也就是说,即使没有创建对象,也
能够调用这个方法。通过 Static 关键字,可以满足这两方面的需要。当你声明一个事物是
Static 时,就意味着这个数据或方法不会与包含它的那个类的任何对象实例关联在一起。所
以,即使从未创建某个类的任何对象,也可以调用其 Static 方法或访问其 Static 数据。通常,
你必须创建一个对象,并用它来访问数据或方法。因为非 Static 数据和方法必须知道它们一
起运作的特定对象。由于在用 Static 方法前,不需要创建任何对象;所以对于 Static 方法,
不能只是简单地通过调用其它方法,而没有指定某个对象,来直接访问非 Static 成员或方法
因为非 Static 成员或方法必须与某一特定对象关联)。

 

有些面向对象语言采用“类数据(class data)”和“类方法(class method)”两个术语,代
表那些数据和方法只是为了整个类,而不是类的某个特定对象而存在的。有时,一些 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;

也可以通过其类名直接引用,而这对于非静态成员则不行。(最好用这个方法引用 static
变量,因为它强调了变量的静态性。)
 
StaticTest.i++;
 
其中,++运算符对变量进行加 1 操作。此时,st1.i 和 st2.i 仍具有相同的值 48。
 
类似逻辑也被应用于静态方法。你既可以像其它方法一样,通过一个对象来引用某个静态方
法,也可以通过特殊的语法形式 ClassName.method( )加以引用。定义静态方法的方式也与

静态class StaticFun {
  static void incr() { StaticTest.i++; }
} 变量的定义方式相似。 
 

     
可以看到,StaticFun  的 incr( )方法通过++运算符将静态数据 i加 1。你可以用典型的方式,
通过对象来调用 incr( ):
 
StaticFun sf = new StaticFun();
sf.incr();

 

或者,因为 incr( )是一个静态方法,所以你也可以直接通过它的类直接调用:
 
StaticFun.incr();
 
尽管当 static作用于某个域时,肯定会改变数据创建的方式(因为一个 static 域对每个类来
说都只有一份存储空间,而非 static 域则是对每个对象有一个存储空间),但是如果 static
作用于某个方法,差别却没有那么大。Static 方法的一个重要用法就是在不创建任何对象的

 

前提下,就可以调用它。正如我们将会看到的那样,这一点对定义 main( )方法时很重要。
这个方法是运行一个应用时的入口点。
 
和其它任何方法一样,static 方法可以创建或使用与其类型相同的被命名对象,因此,static
方法常常拿来做“牧羊人”的角色,负责看护与其隶属同一类型的实例群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值