面向对象(静态代码块)
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而执行,只执行一次。并优先于主函数。
用于给类进行初始化的。
class StaticCode
{
static
{
system.out.println("a");
}
}
class StaticCodeDemo
{
static
{
system.out.println("b"); //1先打印b
}
public static void main(String[] args)
{
new StaticCode();//2打印a。只执行一次类StaticCode中的静态代码块
new StaticCode();//这次不打印。
system.out.println("over");
}
//打印:
b
a
例子2:
class StaticCode
{
static
{
system.out.println("a");//1打印a
}
public staticvoid show()
{
system.out.println("showrun");//2打印show run
}
}
class StaticCodeDemo
{
static
{
}
public static void main(String[] args)
{
StaticCode.show();//静态,类名调用
}//当主函数也有静态代码块
static
{
system.out.println("c");//3然后打印c
}
}
//打印:
a
show run
c
例子3:
class StaticCode
{
StaticCode()
{
system.out.println("b");
}
static
{
system.out.println("a");
}
{//匿名代码块,也是随着类的加载而加载
system.out.println("c");
}
StaticCode(int x)
{
system.out.println("d");
}
public static void show()
{
system.out.println("show run");
}
}
class StaticCodeDemo
{
static
{
}
public static void main(String[] args)
{
new.StaticCode(4);
}
static
{
}
}
//打印
a
c
d
例子4:
class StaticCode
{
int num=9;
StaticCode()//构造函数
{
system.out.println("b");
}
Static//静态
{
system.out.println("a"+num);//编译错误。静态成员无法引用非静态成员num
}
}
例子5:
class StaticCode
{
int num=9;
StaticCode()//构造函数
{
system.out.println("b");
}
Static//静态代码块
{
system.out.println("a");
}
{//代码块
system.out.println("c"+this.num);//引用本类成员中的num,但是代码块优先于主函数存在,优先于int num=8;故此时this.num,默认值为空。
}
StaticCode(int x)
{
system.out.println("d");
}
}
class StaticCodeDemo
{
static
{
}
public static void main(String[] args)
{
new.StaticCode(4);
}
//打印
a
c
d