目录
一、静态变量(Static Variables)
1. 基本概念
静态变量(也称为类变量)是用 static
关键字修饰的成员变量,它属于整个类而非某个特定对象实例。
2. 核心特性
(1)类级别共享
-
所有类的实例共享同一个静态变量。
-
修改一个实例中的静态变量会影响所有其他实例。
(2)生命周期
-
在类加载时初始化,在程序结束时销毁。
-
优先于对象出现,比实例变量的生命周期长。
(3)内存分配
-
静态变量存储在静态区中,静态区在JDK8以前隶属于 JVM 的方法区,到了JDK8以后被迁移至堆内存中。
-
只分配一次内存空间。
3. 使用方法
(1)访问方式
// 推荐方式:通过类名直接访问
Employee.companyName = "New Corp";
// 也可以通过对象访问(不推荐)
Employee emp = new Employee();
emp.companyName = "New Corp";
(2)初始化时机
public class MyClass {
// 声明时直接初始化
static int count = 0;
// 使用静态代码块初始化
static {
count = initializeCount();
}
private static int initializeCount() {
return 10;
}
}
4. 典型应用场景
(1)共享常量
public class Constants {
public static final double PI = 3.1415926;
}
(2)计数器功能
public class Car {
private static int totalCars = 0;
public Car() {
totalCars++;
}
public static int getTotalCars() {
return totalCars;
}
}
(3)配置信息
public class AppConfig {
public static String DB_URL = "jdbc:mysql://localhost:3306/mydb";
public static String LOG_PATH = "/var/log/myapp";
}
二、静态方法(Static Methods)
1. 基本概念
静态方法是使用 static
关键字修饰的类方法,它属于类本身而非类的实例。
2. 核心特性
(1)类级别方法
-
不需要创建对象实例即可调用。
-
通过
ClassName.methodName()
直接访问(通过类名调用)。 -
多用在测试类和工具类中。
(2)访问限制
-
只能直接访问类的其他静态成员(变量/方法)。
-
不能直接访问实例成员(需要先创建对象)。
(3)不可重写性
-
静态方法不能被重写(Override),只能被隐藏(子类可以定义同名static方法)。
3. 使用方法
基本调用方式
// 直接通过类名调用
int sum = MathUtils.add(5, 3);
// 也可以通过对象调用(不推荐)
MathUtils utils = new MathUtils();
utils.add(5, 3); // IDE通常会给出警告
4. 典型应用场景
(1)工具/辅助方法
public class FileUtils {
public static long getFileSize(String path) {
File file = new File(path);
return file.length();
}
}
(2)数学运算
public class Calculator {
public static double circleArea(double radius) {
return Math.PI * radius * radius;
}
}
(3)单例模式实现
public class AppConfig {
private static AppConfig instance;
private AppConfig() {}
public static AppConfig getInstance() {
if(instance == null) {
instance = new AppConfig();
}
return instance;
}
}
三、工具类(Utility Classes)
1. 定义
包含静态方法和静态变量的类,通常被设计为工具类或辅助类,这种类并不用于描述具体的实体事物,而是聚焦于提供通用的功能与服务。由于其所有成员都可通过类名直接调用,无需创建实例,因此通常将构造函数设为私有,从而明确禁止外部对其进行实例化,以确保类的静态成员能被安全、便捷地访问和使用 。
2. 特点
-
私有化构造方法:外界不能创建工具类的对象。
-
方法定义为静态:仅包含静态方法,方便调用。
3. 静态与非静态的区别
特性 | 静态成员 | 非静态成员 |
---|---|---|
归属 | 类 | 实例 |
内存 | 类加载时分配 | 实例化时分配 |
访问限制 | 仅能访问静态成员 | 可访问静态和实例成员 |
线程安全 | 需额外同步(如 volatile ) | 实例隔离,天然线程安全 |
4. 注意事项
-
静态方法只能访问静态变量和静态方法。
-
非静态方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和非静态的成员方法。
-
静态方法中没有this关键字。