一、static 关键字
static 关键字修饰的方法或变量,优先于对象执行。内存中会出现 static 修饰内容,后出现对象。
二、类变量 / 静态变量
使用 static 修饰的成员变量,被称为类变量或静态变量。
类变量是属于类的。只在类加载时初始化一次。
类的所有对象共同共享这一份类变量。
多个类变量的初始化顺序时根据定义顺序初始化的。
package homework.unit5;
/**
* @author liyanan
* @date 2019/12/29 7:57
*/
public class Student {
public static String name;
private int age;
public int getAge() {
return this.age;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name=" + name +
'}';
}
public static void main(String[] args) {
Student.name = "AAA";
Student stu1 = new Student();
Student stu2 = new Student();
System.out.println(stu1);
System.out.println(stu2);
}
}
程序运行结果为:
Student{age=0, name=AAA}
Student{age=0, name=AAA}
我们可以看到 name 只进行了一次赋值,所有对象就可以共享该变量的值,所以打印出来 name 的值都为 AAA。
三、类方法 / 静态方法
使用 static 修饰的方法,被称为类方法或静态方法。
静态方法不能直接访问类的非静态变量或非静态方法,可以实例化对象后,使用对象调用非静态变量或非静态方法。
main 方法就是一个静态方法,访问非静态变量或方法就会报错。
四、静态代码块
**类被加载的时候,静态代码块会被执行,且只能执行一次。**我们常常使用静态代码块对类的资源进行初始化。
package homework.unit5;
/**
* @author liyanan
* @date 2019/12/29 7:57
*/
public class Student {
public static String name;
private static String address;
static {
address = "CCC";
name = "AAA";
}
private int age;
public int getAge() {
return this.age;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name=" + name +
", address=" + address +
'}';
}
public static void main(String[] args) {
Student stu = new Student();
System.out.println(stu);
}
}
使用静态代码块,对类变量 name 和类变量 address 进行初始化。程序运行结果为:
Student{age=0, name=AAA, address=CCC}
五、使用 static 修饰内部类
不可以使用 static 修饰外部类,可以使用 static 修饰内部类。