class A
{
//静态代码块,
static
{
System.out.println("这是类A中的静态代码块");
}
// 构造代码块
{
System.out.println("这是类A中的构造代码块");
}
// 无参构造函数
public A()
{
System.out.println("这是A类的构造函数");
}
// 带有形参的构造函数
public A( int a)
{
System.out.println("这是A类的构造函数"+" a="+a);
}
//定义A类中一个普通的方法show()
public void show()
{
System.out.println("这是A类中的show方法");
}
//定义A类中一个静态的方法static_show()
public static void static_show()
{
System.out.println("这是A类中的static_show方法");
}
}
class Test2
{
static
{
System.out.println("这是主函数中的静态代码块");
}
{
System.out.println("这是主函数中的构造代码块");
}
public static void main(String[] args)
{
System.out.println("------main 函数开始执行-------");
new A();
System.out.println("---------------");
A a=new A(3);
System.out.println("---------------");
A.static_show();
a.show();
}
}
解释:先执行了主函数中的静态代码块,然后主函数中的main函数再执行,主函数中的main中是new A() 这句话,先执行A中的静态代码块,然后执行构造代码块,在执行了A的构造函数,可是当执行A a =new A();时候,却没有再执行静态代码块,而是直接执行了构造代码块,和构造函数,这就说明,静态代码块 随着类的加载而执行,只执行一次,并优先于主函数。
这是我自己改编的一个小程序,你可以看看,希望对你理解这几个问题有帮助。 |