Java 静态关键字与相关概念
Java的static关键字用于修饰变量、方法和类,使其成为静态成员。静态变量被所有对象共享,随类加载而初始化;静态方法只能访问静态成员,常用于工具类。静态成员与非静态成员的关键区别在于加载时机和访问权限。单例模式利用静态特性确保类只有一个实例。main方法作为程序入口必须是静态的。内存结构中,静态变量存储在堆内存的静态区,随类加载而创建。使用static时需注意:静态方法不能访问非静态成员,也没
Java 静态关键字与相关概念
1. static 关键字概述
static 是 Java 中的修饰符,可以修饰:
-
成员变量
-
成员方法
-
构造方法
-
类
2. 静态变量
被 static 修饰的成员变量称为静态变量(或类变量)。
特点:
-
被该类所有对象共享(同一个值)
-
可以使用类名调用或对象名调用
-
未赋值时初始值为
null -
随着类的加载而加载,优先于对象出现
内存机制:
当执行类似 Student.teacherName = "王老师" 的赋值时:
-
JVM 将类的字节码文件加载到方法区
-
在堆内存中创建静态区(静态存储位置)
-
静态区存放该类的所有静态变量
3. 静态方法
被 static 修饰的成员方法称为静态方法,多用于测试类和工具类。
特点:
-
只能访问静态成员变量和静态成员方法
-
可以使用类名调用或对象名调用
-
静态方法中没有
this关键字
访问限制:
| 方法类型 | 可访问的成员 |
|---|---|
| 静态方法 | 只能访问静态成员 |
| 非静态方法 | 可以访问所有成员(静态和非静态) |
4. 关键概念解析
this 关键字
-
表示当前方法调用者的地址
-
由虚拟机赋值
-
在静态方法中不存在
加载时机:
-
静态:随着类的加载而加载
-
非静态:与对象相关,在对象创建时加载
5. 代码示例
public class Student {
private String name;
private int age;
private String gender;
public static String teacherName;
// 构造方法
public Student(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// 非静态方法
public void study() {
System.out.println(name + "正在学习");
}
// 静态方法
public static void showTeacher() {
System.out.println("老师姓名:" + teacherName);
// 以下代码会报错,静态方法不能访问非静态成员
// System.out.println("学生姓名:" + name);
}
// getter 和 setter 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 其他getter和setter方法...
}
6. 单例设计模式
使用静态变量和静态方法实现单例模式:
public class Singleton {
private static Singleton instance;
private Singleton() {
// 私有构造方法
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
7. main 方法解析
public static void main(String[] args) {
// 方法体
}
各组成部分的作用:
-
public:被 JVM 调用,需要足够的访问权限
-
static:被 JVM 调用,无需创建对象,直接通过类名访问
-
void:被 JVM 调用,不需要返回值
-
main:通用名称,不是关键字,但被 JVM 识别
-
String[] args:用于接收键盘录入数据(目前较少使用)
注意事项:
由于 main 方法是静态的,测试类中的其他方法通常也需要是静态的。
8. 内存结构总结
| 区域 | 内容 | 加载时机 |
|---|---|---|
| 方法区 | 类的字节码文件 | 类加载时 |
| 堆内存-静态区 | 静态变量 | 类加载时 |
| 堆内存 | 对象实例和非静态变量 | 对象创建时 |
更多推荐



所有评论(0)