【JAVA】JAVA中的静态变量、全局变量

一、静态变量

在Java中,静态变量是指用关键字 static 声明的变量,它属于类级别的变量而不是对象级别的变量。因此,无论创建多少个类的实例对象,静态变量只会被初始化一次,并且在整个应用程序的生命周期内都存在于内存中,可以通过类名直接访问和修改。

1.1、静态变量的特点和使用方法

  • 类级别的变量:静态变量属于类级别,而不是对象级别。即使没有创建类的实例对象,也可以通过类名直接访问和修改静态变量。
  • 一次初始化:静态变量在类加载时被初始化,并且只会被初始化一次。当类加载器加载类时,静态变量就会被分配内存空间并赋初值。
  • 全局可访问:静态变量可以在整个应用程序的任何地方访问和修改,因此它们通常被用来实现全局数据或者共享数据(这个还是要看修饰符的,通常情况下是可以作为全局变量使用)。
  • 共享数据:静态变量是多个对象共享的数据,所有实例对象都可以访问和修改静态变量,修改的值对所有对象都是可见的。
  • 命名规范:通常静态变量的命名习惯是使用大写字母和下划线分隔的方式,例如MAX_COUNT。

1.2、静态变量的使用场景

  • 存储常量值或者全局配置信息,例如定义常量PI、MAX_SIZE等。
  • 实现单例模式中的全局唯一实例对象引用。
  • 实现工具类中的共享数据或者静态方法。
  • 记录全局状态或者计数器等。

1.3、简单的示例,

展示了Java中静态变量的定义和使用方式:

public class StaticVariableExample {
    public static int totalCount = 0; // 静态变量

    public StaticVariableExample() {
        totalCount++; // 每次创建对象时,增加计数器
    }

    public static void main(String[] args) {
        StaticVariableExample obj1 = new StaticVariableExample();
        StaticVariableExample obj2 = new StaticVariableExample();
        StaticVariableExample obj3 = new StaticVariableExample();

        System.out.println("总计数:" + StaticVariableExample.totalCount); // 输出:总计数:3
    }
}

在上面的示例中,静态变量 totalCount 被用来统计创建的对象个数,在每次创建对象时增加计数器的值。通过类名直接访问静态变量可以获取到全局的计数器值。

1.4、静态变量作用范围

静态变量在Java中通常被称为类级别的变量,而不是对象级别的变量。 虽然静态变量可以被整个类的实例对象共享,但并不意味着它一定是全局的,它的作用范围是有限的,主要取决于其定义的位置和可访问性。

静态变量的作用范围主要包括以下几个方面:

  • 类内部:静态变量可以在类的任何方法、构造方法、静态代码块等地方直接访问和修改,属于类的内部作用范围。
  • 同一个包内其他类:如果静态变量的访问修饰符是public或者protected,则其他处于同一个包内的类也可以访问该静态变量。
  • 其他包内的类:如果静态变量的访问修饰符是public,则其他包内的类也可以访问该静态变量。但是,如果静态变量的访问修饰符是protected、private或者默认(即没有显式指定访问修饰符),则其他包内的类无法访问该静态变量。
  • 跨类加载器:在某些特殊情况下,比如涉及到不同的类加载器加载的类,静态变量的作用范围可能会更加复杂,可能会有多份静态变量实例存在。详情参考【JAVA】类加载过程,以及类加载器

因此,静态变量的作用范围是可以限定的,取决于其访问修饰符和所在的包结构。在实际开发中,要根据需求合理定义静态变量的访问修饰符,以确保数据的安全性和封装性。

二、全局变量

在Java中,全局变量通常指的是静态变量或者单例模式中的静态变量,它们属于类级别的变量,在整个应用程序的生命周期内都存在于内存中,并且可以被该类的所有实例对象共享。

这些变量在类加载时被初始化,属于类本身而不是类的实例。全局变量在Java中指的是整个应用程序范围内可访问的变量,通常是通过静态变量或者单例模式来实现的。

全局变量的作用范围比较广,可以在任何地方访问和修改,因此在使用全局变量时要考虑其线程安全性和内存占用问题。

2.1、静态变量(Static Variables):

静态变量属于类,而不是类的实例。它们在类加载时被初始化,并且只会被初始化一次。静态变量可以通过类名直接访问,无需创建类的实例。静态变量通常用于表示类级别的共享数据,例如常量、计数器、配置信息等。

public class MyClass {
    public static int count = 0; // 静态变量

    public static void main(String[] args) {
        MyClass.count++; // 访问静态变量
        System.out.println("Count: " + MyClass.count);
    }
}

2.2、单例模式中的静态变量

在单例模式中,静态变量常常用于实现单例对象的唯一实例。单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。

通常情况下,单例模式中的静态变量是私有的,并且通过静态方法来获取该实例。这样可以确保单例对象的唯一性和全局访问性。

以下是一个简单的单例模式示例,展示了静态变量在单例模式中的应用:

public class Singleton {
    // 私有静态变量,用于保存单例实例
    private static Singleton instance;

    // 私有构造方法,防止外部实例化
    private Singleton() {
        // 初始化单例对象
    }

    // 公有静态方法,用于获取单例实例
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton(); // 懒汉式单例模式
        }
        return instance;
    }

    // 其他方法和属性
}

在这个示例中,instance 是一个私有静态变量,用于保存 Singleton类的唯一实例。getInstance 方法是一个公有静态方法,用于获取单例实例。在第一次调用 getInstance 方法时,会创建一个新的实例并将其赋值给 instance 变量,之后再次调用getInstance方法时就会直接返回已经创建的实例。

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值