1.static关键字作用
static关键字修饰类成员变量、成员方法、内部类可以使这些类成员的创建和使用,直接与类相关而与具体实例无关。
2.静态变量(类变量)
只在系统加载类时分配空间及初始化,创建该类实例时不再分配空间,为所有实例提供共享类的静态变量。(可进行实例间的通信或者统计跟踪是该类实例的数目)。
只依附于类,与实例对象无关,对于不是private类的静态变量,可以直接用类名调用。
3. 静态方法(类方法)
1> 通过类名访问而不是实例对象访问,so 静态方法中没有this指针,不能访问该类非静态变量、方法,只能访问自己方法体内局部变量、自己的参数和静态变量。
2> 子类不能重写父类的静态方法,但可以声明与父类静态方法相同的方法,以隐藏父类的该静态方法。子类不能把父类非静态变为静态,编译错误。
3> main()方法是静态方法。JVM不创建实例就可以运行该方法。因此,main()中访问变量、方法,就要创建实例对象。
4. 静态代码块
类变量初始化,加载该类时只执行一次,优先级最高,先于构造方法执行。
静态代码块>mian方法(静态方法)>构造代码块>构造方法
class Code{
{
System.out.println("Code的构造块");
}
static{
System.out.println("Code的静态代码块");
}
public Code(){
System.out.println("Code的构造方法");
}
}
public class CodeBlock03{
{
System.out.println("CodeBlock03的构造块");
}
static{
System.out.println("CodeBlock03的静态代码块");
}
public CodeBlock03(){
System.out.println("CodeBlock03的构造方法");
}
public static void main(String[] args){
System.out.println("CodeBlock03的主方法");
new Code();
new Code();
new CodeBlock03();
new CodeBlock03();
}
}
// 输出结果
/*
CodeBlock03的静态代码块
CodeBlock03的主方法
Code的静态代码块
Code的构造块
Code的构造方法
Code的构造块
Code的构造方法
CodeBlock03的构造块
CodeBlock03的构造方法
CodeBlock03的构造块
CodeBlock03的构造方法
*/