文章目录
- Java中的static关键字
- 1. 静态变量
- 2. 静态方法的特点
- 3. 静态块
- 4. 静态导入
- 5. 单例模式中的应用
Java中的static关键字
在Java中,static是一个关键字
,用于定义类级别的成员,这些成员与类的实例无关
。static成员属于类
而不是类的实例,因此它们在类加载时被初始化
,并且无需创建类
的实例即可访问
。
1. 静态变量
静态变量是static关键字的一个重要用法之一。它们被用于表示类级别的数据
,而不是实例级别的数据。所有类的实例共享同一个静态变量的值。
- 静态变量的默认值规则和实例变量一样。
- 静态变量值是所有对象共享。
- 静态变量在本类中,可以在任意方法、代码块、构造器中直接使用。
- 如果权限修饰符允许,在其他类中可以通过“类名.静态变量”直接访问,也可以通过
“对象.静态变量”的方式访问(但是更推荐使用类名.静态变量的方式)。 - 静态变量的 get/set 方法也静态的,当局部变量与静态变量重名时,使用“类名.静态
变量”进行区分。
public class MyClass {
// 静态变量
static int staticVariable = 10;
// 其他成员变量和方法等
}
// 使用静态变量
System.out.println(MyClass.staticVariable);
2. 静态方法的特点
- 静态方法在本类的任意方法、代码块、构造器中都可以直接被调用。
- 只要权限修饰符允许,静态方法在其他类中可以通过“类名.静态方法“的方式调用。也可以通过”对象.静态方法“的方式调用(但是更推荐使用类名.静态方法的方式)。
- 在 static 方法内部只能访问类的 static 修饰的属性或方法,不能访问类的非 static 的结构。
- 静态方法可以被子类继承,但不能被子类
重写
。 - 静态方法的调用都只看编译时类型。
- 因为不需要实例就可以访问 static 方法,因此 static 方法内部不能有 this,也不能有super。如果有重名问题,使用“类名.”进行区别。
public class MyClass {
// 静态方法
static void staticMethod() {
System.out.println("This is a static method.");
}
// 其他成员方法等
}
// 调用静态方法
MyClass.staticMethod();
3. 静态块
静态块是用static关键字定义的一个代码块,在类加载时执行。通常用于执行静态变量的初始化
或执行一些静态的初始化操作
。
public class MyClass {
// 静态块
static {
System.out.println("Static block executed.");
}
// 其他成员变量和方法等
}
// 类加载时,静态块被执行
4. 静态导入
静态导入是使用static关键字导入类的静态成员,使得可以直接使用静态成员而无需使用类名。
import static java.lang.Math.*;
public class MyMathClass {
public static void main(String[] args) {
// 使用静态导入的Math类中的静态方法
double result = sqrt(25.0);
System.out.println(result);
}
}
5. 单例模式中的应用
static关键字在单例模式的实现中也经常发挥重要作用,确保只有一个类
的实例存在。
public class Singleton {
// 声明一个静态变量来保存实例
private static Singleton instance;
// 私有化构造方法,防止外部实例化
private Singleton() {}
// 提供一个公共的方法获取实例
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}