static关键字的用法

静态变量和静态方法

public class Hello {
    private static int age;  //静态变量,又称类变量
    private double score;  //实例变量
    public static void main(String[] args) {
        Hello a = new Hello();
        System.out.println(Hello.age);  //静态变量,可以不创建对象,通过类名调用,推荐使用这种方式调用
        System.out.println(a.age);  //也可以创建对象调用
        System.out.println(a.score);  //实例变量,必须创建对象才能调用
        //同理静态方法也是如此,但由于静态方法是和类一起加载的,因此不可调用非静态方法,反之可以
    }
}

静态代码块

public class Hello {
    public static void main(String[] args) {
        Hello hello = new Hello();
        System.out.println();
        Hello hello1 = new Hello();
    }
    static {
        System.out.println("静态代码块,只执行一次");  //静态代码块,在类加载的时候就会执行,无论是否创建了对象。以后不再执行
    }
    {
        System.out.println("匿名代码块");  //匿名代码块,每次创建对象都会执行,和构造方法类似
    }

    public Hello() {
        System.out.println("构造方法");
    }
}

静态导入包

//静态导入包,调用方法可以不用写类名
import static java.lang.Math.random;

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

抽象类(和接口类似,但接口可以多继承)

//abstract关键字定义抽象类,其不能创建对象,只能通过子类继承重写
public abstract class Hello {
    //定义抽象方法,只有名字没有方法体
    public abstract void method();
    public void f(){}
    public Hello() {}  //虽然抽象类不能new对象,但也存在构造器
}

class Son extends Hello{
    @Override
    public void method() {
        //继承抽象类的子类,除非自己也定义为抽象类,否则必须要重写父类的抽象方法,普通方法不用重写
    }
}