首页 > 编程笔记 > Java笔记 阅读:58

Java static静态变量和静态方法的用法(附带实例)

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

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

Java static静态变量

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

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

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

【实例】实现在 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);
    }
}
程序运行结果为:
通过对象调用静态变量的返回值:1
通过类名调用静态变量的返回值:1
程序可以正常执行,说明静态变量既可以通过对象调用也可以通过类名调用,而且返回值完全一样。

静态变量被类的所有对象共享,同一时间点它的值是唯一的,那就意味着如果有一个对象修改了静态变量的值,那么其他对象读出的都是修改后的值。下面通过一个示例演示这一特性:
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);
    }
}
程序运行结果为:

通过对象 1 调用静态变量的返回值:2
通过对象 2 调用静态变量的返回值:2
通过类名调用静态变量的返回值:2

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

Java static静态方法

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

调用静态方法的语法格式如下:
对象.静态方法
类名.静态方法
下面通过一个示例演示静态方法的调用:
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());
    }
}
程序运行结果为:

通过对象调用静态方法的返回值:1
通过类名调用静态方法的返回值:1

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

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

相关文章