static 关键字的使用

172 阅读2分钟

一、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 修饰内部类。