需要注意以下几点:
一、什么叫做类初始化?类初始化是一个类进内存不需要对象的情况下应该做的事情。
二、随着类的加载而执行,只执行一次,并优先于主函数。(先执行文件名类,再执行定义类中static,再执行System.out.println();同时当主函数下有两个相同的new 语句时候,只执行一个语句)。
三、System.out.println(“a”+this.num);这句话不能执行,而System.out.println(“c”+this.num)这句话能执行是因为当执行完System.out.println(“a”)时候,已经将对象进行初始化了,所以
System.out.println(“c”+this.num)中this已经有了对象。
四、new StaticCode(4)语句只能调用 StaticCode(int x)这个构造函数,而与StaticCode()语句无任何关系
/*
静态代码块。
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而执行,只执行一次,并优先于主函数。
用于给类进行初始化的。
*/
class StaticCode
{
int num = 9;
StaticCode()
{
System.out.println("b");
}
static
{
System.out.println("a");
}
{
System.out.println("c"+this.num);
}
StaticCode(int x)
{
System.out.println("d");
}
public static void show()
{
System.out.println("show run");
}
}
class StaticCodeDemo
{
static
{
//System.out.println("b");
}
public static void main(String[] args)
{
new StaticCode(4);//a c d
//new StaticCode();
//new StaticCode();
//System.out.println("over");
//StaticCode.show();
//StaticCode s = null;
//s = new StaticCode();
//StaticCode.show();
}
static
{
///System.out.println("c");
}
}
//d:\>java0217\day06>java StaticCodeDemo
//b c a over