Static修饰的变量的生存周期是从程序开始到结束
1.修饰成员变量和成员方法。
这时候可以使用类名.变量名 来调用。在类被初次加载的时候就会被初始化。
2.修饰代码块就是静态代码块
当调用静态方法或者静态变量的时候,也会随着调用静态代码块
静态代码块无论你创建几个该类的对象,静态代码块都只会执行一次。
比如:Test类
static{
System.out.println("Test6 static block");
}
{
System.out.println("Test6 non-static block");
}
public Test() {
System.out.println("Test6 constructor with no arguments");
}
public Test(String id){
System.out.println("Test6 constructor with one argument id"+ id);
}
public static int book=1;
public static void sixi(){
System.out.println("static method");
}
new Test();
System.out.println("*****************");
new Test("1");
运行后:Test6 static block只会运行一次。
Test6 static block
Test6 non-static block
Test6 constructor with no arguments
*****************
Test6 non-static block
Test6 constructor with one argument id1
调用静态方法:Test.sixi();
也会先输出:Test6 static block(我认为之所以会输出这个静态代码块中的内容是因为调用静态方法也要加载类,在加载类的过程中就把静态代码块运行了)
然后再输出:static method
3.修饰一个类
我们在一个类内部再创建一个类的话
如果不用static修饰这个类的话,那么我们使用这个类的时候一定要创建这个类的外面的那个类的对象,然后使用那个对象.new 类名
Test test=new Test(); A a=test.new A();
4.有静态代码块的各部分的运行时机
1.父类的静态代码块
2.子类的静态代码块
3.父类的非静态成员
4.父类的构造方法
5.子类的非静态成员
6.子类的构造方法
如果每项里面的有多个的话就按照顺序执行