Java面向对象04:static关键字和抽象类

static关键字的用法

静态变量和静态方法

public class Hello {
    private static int age;  //静态变量,又称类变量
    private double score;  //实例变量
    public static void main(String[] args) {
        Hello a = new Hello();
        System.out.println(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("匿名代码块");  //匿名代码块,每次创建对象都会执行,在构造方法之前
        int a;  //定义的变量是局部变量
    }

    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(){  //可以定义普通方法
        int a;
    }
    int a = 1;  //可以定义变量
    
    public Hello() {}  //虽然抽象类不能实例化,但也存在构造器
}

class Son extends Hello{
    @Override
    public void method() {
        //继承抽象类的子类,除非自己也定义为抽象类,否则必须重写父类的抽象方法,普通方法不用重写
    }
}
posted @ 2021-09-07 16:09  振袖秋枫问红叶  阅读(67)  评论(0)    收藏  举报