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() {
//继承抽象类的子类,除非自己也定义为抽象类,否则必须重写父类的抽象方法,普通方法不用重写
}
}