1. Static关键字
1.1 静态方法
用static标记的方法被称为静态方法。
-
静态方法在调用的时候不需要实例化对象
-
静态方法直接通过类的名称来调用的
-
静态方法内部只能调用静态变量和其他静态方法,但是非静态方法可以调用静态方法
-
静态方法中不能使用this
-
静态方法不能自动销毁,自建立开始静态方法一直存在内存中,直到JVM关闭
-
子类在调用之前,父类中所有的静态方法都会执行
静态方法的本质是共享代码段,类中的静态方法和静态变量在创建后共用一块内存
1.2 静态变量
静态变量在类被加载的时候就初始化了,在该类的任何静态方法执行之前就初始化,类的所有实例对象共享同一个静态变量
静态变量的本质是共享数据段,所以一旦改变一个对象中静态变量的值后,其所有实例对象的该变量值也会随之改变
用一个例子来说明静态方法的执行:
public class StaticSuper {
static {
System.out.println("super static block");
}
StaticSuper() {
System.out.println("super constructor");
}
}
public class StaticTest extends StaticSuper {
static int rand;
static {
rand = (int) (Math.random()*6);
System.out.println("static block"+rand);
}
StaticTest(){
System.out.println("constructor");
}
public static void main(String[] args) {
/*
在子类的main方法执行之前,会先执行父类中的静态方法,然后执行子类中的静态方法
super static block
static block3
*/
System.out.println("main");
StaticTest staticTest = new StaticTest();
// 先执行父类构造方法,然后执行子类构造方法
// 输出super constructor constructor
}
}
2. final关键字
final关键字表示最终的意思,即不能再被修改
-
final修饰的变量不能被修改
-
final修饰的方法不能被重写
-
final修饰的类不能被继承
如果一个类已经标记为final,不能其方法就不需要再被标记为final