static关键字
在Java中,static是一个非常重要的关键字,它可以用来修饰变量、方法和代码块。当使用static修饰一个变量或方法时,它们就成了属于类本身的,而不是属于某个具体的类实例。
静态变量(static变量)
属于类:静态变量属于类,所有的实例共享同一个静态变量。如果任何实例修改了静态变量,这个变化对所有其他实例都是可见的。
节省空间:不管你创建了多少个类的实例,静态变量只占用一份内存空间。
例子:假设你在玩一个游戏,游戏里的总分是所有玩家共享的。这个总分就可以用静态变量表示,所有玩家的得分都会添加到这个总分上。
静态方法(static方法)
直接通过类调用:静态方法可以直接通过类名调用,不需要创建类的实例。这很适合于工具方法,比如数学计算等。
访问限制:静态方法不能直接访问类的实例变量或实例方法,因为静态方法在没有创建任何实例的情况下就可以被调用。
静态代码块
静态代码块是使用static关键字修饰的代码块,它在类加载到JVM时自动执行,且只执行一次。静态代码块主要用于初始化静态变量或执行只需进行一次的操作。
初始化操作:如果你有复杂的初始化逻辑,这些逻辑只需要执行一次,比如设置系统环境,加载配置文件等,静态代码块非常适合这种用途。
执行顺序:如果一个类中有多个静态代码块,它们将按照在代码中出现的顺序执行。
例子
想象你开了一家连锁咖啡店,店里有一个大屏幕显示所有分店今天卖出的总杯数。这个“总杯数”就是一个静态变量,因为它属于整个连锁品牌而不是某个单独的店。而且,不管哪家分店卖出一杯咖啡,这个总杯数都会增加。如果有需要在开店前做的准备工作,比如加载今天的特价信息,这就可以放在静态代码块中执行。
public class CoffeeShop {
static int totalCupsSold = 0; // 静态变量,记录所有分店的总杯数
static {
// 静态代码块,用于一些初始化操作,比如加载配置
System.out.println("Loading daily specials...");
}
public static void sellOneCup() {
totalCupsSold++;
System.out.println("Total cups sold: " + totalCupsSold);
}
}
在这个例子中,无论创建多少个CoffeeShop的实例,totalCupsSold都是共享的,并且Loading daily specials...这句只在类第一次被使用时输出一次,用来模拟加载每日特价的动作。
总结
static关键字使得变量和方法独立于类的任何特定实例,适用于那些通用的、与类相关而非对象实例相关的特性。静态代码块提供了一种方便的在类加载时
执行初始化代码的机制,这对于设置应用程序的启动环境非常有用。