- static关键字
- static修饰的方法或者变量,优先于对象执行,所以在内存中
- 先有static修饰的内容
- 再有对象的内容
- 可以用来修饰类的成员方法、成员变量、static静态代码块
- 修饰变量就是类变量,修饰的方法就是类方法
- 类变量和类方法,直接能够通过
类名.方法名/变量名
调用,不需要经过创建的对象
- static修饰的方法或者变量,优先于对象执行,所以在内存中
public class StudentStatic {
String name;
//静态变量
static int age;
public int getAge() {
return age;
}
public static void setAge(int age) {
StudentStatic.age = age;
}
}
public class Student {
public static void main(String[] args) {
StudentStatic studentStatic = new StudentStatic();
studentStatic.name="junko";
StudentStatic.age=24;
StudentStatic studentStatic2 = new StudentStatic();
studentStatic2.name="jjbq";
System.out.println(studentStatic.name);
System.out.println(studentStatic.getAge());
System.out.println(studentStatic2.name);
System.out.println(studentStatic.getAge());
}
}
运行结果
![]()
可以看到,在StudentStatic 定义的静态变量age不能直接被对象studentStatic 调用,需要通过方法getAge。或者System.out.println(StudentStatic.age);
同时可以发现,两个对象输出的静态变量age是相同的,因此引出static的另一个点:
- static变量也称作静态变量
- 和非静态变量的区别是,静态变量被所有对象共享,在内存中只有一份。它当且仅当在类初次加载时被初始化。
- 非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响
- static成员变量的初始化顺序按照定义的顺序进行初始化
- static方法也称作静态方法
- 不依赖于任何对象就可以进行访问
类名.方法名
- > StudentStatic.getAge();
- 不能访问类的非静态成员变量和非静态成员方法
- >
- >
- 不依赖于任何对象就可以进行访问
- 静态代码块
- 加载类的时候,静态代码块会被执行一次,且只能执行一次
- 静态内容优先于非静态内容,所以静态代码块比构造方法先执行
- 使用场景:用来一次性对静态成员变量进行赋值,或者类资源初始化操作(例如redisUtils,dateUtils等)
public class StudentStatic {
static {
System.out.println("静态代码块被执行了!");
age=23;
}
再次运行输出,可以看到
最后的一些注意事项
- 静态方法不能直接访问非静态变量
- 静态方法中不能用this
- 核心:一个类里面static修饰的不能访问非static修饰的成员或者方法,而非static修饰的可以访问static修饰的成员或者方法