没加上static,均为成员变量。
static+复合语句 形成的代码块,称为静态代码块。
static{
类型 变量名列表;
语句;
……
}
一、静态:共同数据单独存放,节省空间。
作用:1.随着类的加载而加载,随着类的消失而消失。生命周期最长。
2.优先于对象存在
3.被所有对象共享
4.静态方法只能访问静态成员。静态方法内,不能出现this关键字(要先有对象)
加载顺序:静态代码块>构造代码块>构造方法(在main运行之前,先运行静态代码块)
PS:构造代码块//实例块(给所有对象进行统一初始化)
{
System.out.println("执行代码……");
}
构造方法(给对应对象进行初始化)
public StaticVariable()
{
System.out.println("执行构造方法……")
}
static//静态代码块,允许有多个(按前后顺序加载)
static
{
StaticVariable.a=100;
System.out.println("这是一个静态代码块。a="+a);
}
//静态方法
static void info()
{
System.out.println("方法info输出,"+StaticVariables.a);
}
PS:静态方法中不能出现非静态成员
无论在哪里对静态变量(类变量)进行修改,将影响所有对象。
静态变量a的三种访问方式:a(直接访问)、StaticVariables.a(类名访问)、SV1.A(对象名访问)
在对象实例化过程中,首先执行构造代码块(实例化代码),然后执行构造方法。
二、构造代码块与静态代码块的对比:
1.静态代码块随着类的加载而执行,只执行1次。创造n个对象,就执行n次(构造代码块)
2.静态代码块随类加载。构造代码块必须有对象。