Java面向对象系列(12)- Static关键字讲解

场景一:静态变量

package oop.demo07;

public class Student {

    private static int age;//静态的变量  一般多线程用的比较多
    private double score;//非静态变量

    public static void main(String[] args) {
        Student s1 = new Student();

        System.out.println(Student.age); //static静态变量,可以通过类直接调用
        System.out.println(s1.age);
        System.out.println(s1.score);
    }
}

场景二:静态方法

package oop.demo07;

public class Student {
    
    public void run(){
        System.out.println("Run");
        go(); //可以直接调用静态方法
    }

    public static void go(){
        System.out.println("go");
    }

    public static void main(String[] args) {
        Student.go(); //静态方法可以通过类直接调用
        go(); //同时静态方法还支持直接调用
        new Student().run();//非静态方法,需要先new进行实例,才能调用
    }
}

Static修饰的含义隶属于类,而不是对象,是一个公共的存储内存的空间

 场景三:代码块

package oop.demo07;

public class Student {
    /*
    {
        //代码块(匿名代码块)
        创建对象的时候就创建了匿名代码块,而且在构造器之前

    }

    static {
        //静态代码块
        常用于加载一些初始化的数据
        类一加载就执行,永久只执行一次
    }
     */

    //第二个执行
    {
        System.out.println("匿名代码块");
    }

    //第一个执行
    static {
        System.out.println("静态代码块");
    }

    //第三个执行
    public Student() {
        System.out.println("构造器(构造方法)");
    }

    public static void main(String[] args) {
        Student student = new Student();
    }
}

Static代码块只执行一次,匿名代码块和构造器new一次,执行一次

场景四:静态导入包

常规

package oop.demo07;

public class Student {
    public static void main(String[] args) {
        System.out.println(Math.random());
        System.out.println(Math.PI);
    }
}

静态导入包,调用方法更简洁

package oop.demo07;

//静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;
public class Student {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }
}