前言:java有四大代码块:静态代码块、构造代码块、局部代码块、同步代码块。
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
现在我们主要讨论前三种。
先看一种情况:
父类
package static_code;
/**
* Created by guan on 4/9/17.
*/
public class Parent {
//父类,构造代码块
{
System.out.println("Parent's Code Block");
}
//父类,静态代码块
static {
System.out.println("Parent's Static Code Block");
}
//父类,局部代码块,是构造函数
public Parent()
{
System.out.println("Parent's Constructor.");
}
}
同理:子类
package static_code;
/**
* Created by guan on 4/9/17.
*/
public class Child extends Parent {
{
System.out.println("Child's Code Block.");
}
static {
System.out.println("Child's Static Code Block.");
}
public Child()
{
System.out.println("Child's Constructor.");
}
//==========================================================
/**
* main函数,程序入口
* @param args
*/
public static void main(String[] args)
{
System.out.println("main function is called.");
new Child();
}
//==========================================================
}
程序运行结果:
Parent's Static Code Block
Child's Static Code Block.
main function is called.
Parent's Code Block
Parent's Constructor.
Child's Code Block.
Child's Constructor.
结果:
1、父类静态代码块(先声明的先执行);
2、子类静态代码块(先声明的先执行);
3、父类的代码块(先声明的先执行);
4、父类的构造函数;
5、子类的代码块(先声明的先执行);
6、子类的构造函数。
1- 静态代码块和静态变量一样,在类加载的时候执行,即在main函数调用之前就已经执行了。
静态代码块和静态变量是先声明的先执行,并且只执行一次。
2- 构造代码块在创建对象的时候执行,每创建一个对象就执行一次,即可以执行多次。
构造代码块在构造函数前执行。
父类加入静态变量的情况
新的父类:
package static_code;
/**
* Created by guan on 4/9/17.
*/
public class Parent {
static BasicClass bc=new BasicClass("Static variate :bc");
BasicClass bc2=new BasicClass("variate: bc2");
{
System.out.println("Parent's Code Block");
}
static {
System.out.println("Parent's Static Code Block");
}
public Parent()
{
System.out.println("Parent's Constructor.");
}
}
变量的定义
/**
* Created by guan on 4/9/17.
*/
public class BasicClass {
public BasicClass(String s)
{
System.out.println("Basic Class Print Something:\t"+s);
}
}
结果
Basic Class Print Something: Static variate :bc
Parent's Static Code Block
Child's Static Code Block.
main function is called.
Basic Class Print Something: variate: bc2
Parent's Code Block
Parent's Constructor.
Child's Code Block.
Child's Constructor.
结果正好验证的上面的结论:
对于静态代码块和静态变量,先定义的先执行。
对于构造代码块和全局变量,先定义的先执行。