购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.6 static关键词

一般情况下,类的成员(变量或方法)必须通过该类的对象访问。但有的时候希望定义一个类的成员,可以独立于该类的任何对象。Java提供了这种机制,只需要在类成员的声明前面加上关键字static即可。

由static修饰的成员变量和成员方法被称为静态变量和静态方法,例如最常见的静态方法就是main()方法。因为在程序开始执行时必须首先调用main()方法,此时还没有实例化任何对象,无法通过对象调用,所以它被声明为静态方法被系统直接调用。

3.6.1 静态变量

如果一个类的成员变量被static修饰,那么这个成员变量就是静态成员变量,也可以简称为静态变量。

静态变量不属于类的某个具体对象,被该类所有的对象共享。该类的任何对象访问它时都会取得相同的值。如果一个对象修改了静态变量的值,其他对象读出的都是修改后的值。

静态变量既可以被对象调用也可以通过类名调用。调用静态变量的语法格式如下。


  对象.静态变量
  类名.静态变量

  

下面通过一个示例演示静态变量的调用方法。

【例3-7】静态变量的调用。

功能实现: 在StaticTest1类中通过两种方法调用静态变量。


  public class StaticTest1 {
      static int count=1; //静态变量
      public static void main(String[] args) {
           StaticTest1 static1 = new StaticTest1();
           //通过对象调用静态变量count
           int count1 = static1.count;
           System.out.println("通过对象调用静态变量的返回值:" +count1);
           //通过类名调用静态变量count
           int count2 =StaticTest1.count;
           System.out.println("通过对象调用静态变量的返回值:" +count2);
      }
  }

  

程序运行结果如图3-13所示。

图3-13 例3-7运行结果

程序可以正常执行,说明静态变量既可以通过对象调用也可以通过类名调用,而且返回值完全一样。

静态变量被类的所有对象共享,同一时间点它的值是唯一的,那就意味着如果有一个对象修改了静态变量的值,那么其他对象读出的都是修改后的值。下面通过一个示例演示这一特性。

【例3-8】验证静态变量值的唯一性。

功能实现: 在StaticTest2类中,通过不同的对象和类名调用静态变量,验证值的唯一性。


  public class StaticTest2 {
      static int count=1; //静态变量
      public static void main(String[] args) {
           //创建两个对象
           StaticTest2 static1 = new StaticTest2();
           StaticTest2 static2 = new StaticTest2();
           //通过第一个对象修改静态变量的值
           static1.count=2;
           //通过不同的对象调用静态变量
           System.out.println("通过对象1调用静态变量的返回值:" +static1.count);
           System.out.println("通过对象2调用静态变量的返回值:" +static2.count);
           //通过类名调用静态变量
           System.out.println("通过类名调用静态变量的返回值:" +StaticTest2.count);
      }
  }

  

程序运行结果如图3-14所示。

图3-14 例3-8的运行结果

程序分析: 静态变量count的初始值为1。在main()方法中,通过对象static1把count的值修改为2,然后分别通过两个对象和类名调用静态变量,返回值都是修改后的值,证明了静态变量在同一时间点值是唯一的。

3.6.2 静态方法

由static关键词修饰的方法就是静态方法。静态方法既可以通过对象调用,也可以通过类名调用。

调用静态方法的语法格式如下。


  对象.静态方法
  类名.静态方法

  

下面通过一个示例演示静态方法的调用。

【例3-9】静态方法的调用。

功能实现: 在StaticTest3类中通过两种方法调用静态方法。


  public class StaticTest3 {
      static int count =1; //静态变量
      //静态方法
      public static int getCount() {
           return count;
      }
      public static void main(String[] args) {
           //创建对象
           StaticTest3 static1 = new StaticTest3();
           //通过对象调用静态方法
           System.out.println("通过对象调用静态方法的返回值:" +static1.getCount());
           //通过类名调用静态方法
      System.out.println("通过类名调用静态方法的返回值:" +StaticTest3.getCount());
      }
  }

  

程序运行结果如图3-15所示。

图3-15 例3-9的运行结果

程序可以正常执行,说明静态方法既可以通过对象调用也可以通过类名调用,返回值一样。

静态方法和非静态方法的区别主要体现在以下两方面。

①调用静态方法时,既可以通过类名调用也可以通过对象调用,非静态方法只能通过对象调用。

②静态方法只允许使用类中的静态变量和静态方法,不能使用类中的非静态成员变量和成员方法,而非静态方法没有这方面的限制。 SZ3GSEnVBAAe7iKP0qTqg7Zw/j0yocNPDwWGUGhirwCwS48XCue1uocrUxdOMpNN

点击中间区域
呼出菜单
上一章
目录
下一章
×