静态块格式:
static
{
}
静态块在类被加载的时候执行,又因为加载子类时,会预先加载父类,因此父类中如果有静态块,则最先执行。然后立即执行子类的静态块。
如果一个类中有多个静态块,则按照编码的先后顺序执行。
注:由于类只会被加载一次,因此每个静态块便只会执行一次。
自由块格式:
{
}
自由块在类被实例化时执行。
如果要实例化一个子类,那么他的构造函数会先实例化其父类。因此父类的自由块会先被执行,然后开始构造父类。父类的构造器执行完毕后,操作权返回给子类的构造器,此时开始执行子类的自由块。
然后开始构造子类。
然后开始构造子类。
- package com.lsky.test;
- public class Father {
- private int sum;
- //父类中的静态块
- static{
- System.out.println("2010年新年快乐");
- }
- public void first(int i){
- sum=++i+sum++-1+i--;
- System.out.println(sum);
- }
- //父类无参构造器
- public Father(){
- System.out.println("美好的一天");
- }
- //含参数构造器
- public Father(String s){
- System.out.println("我们是学生");
- }
- //父类中的自由块
- {
- System.out.println("菩提本无树,明镜亦非台,本来无一物,何处惹尘埃");
- }
- }
- package com.lsky.test;
- public class Son extends Father {
- private int sum;
- private static Father father;
- //子类中含参构造器(含参构造函数)
- public Son(Father father){
- this();
- father.first(8);
- }
- //子类中无参构造器(无参构造函数)
- public Son(){
- this.punk(6);
- }
- public void first(int i){
- sum=sum+i++;
- System.out.println(sum);
- }
- //子类中的静态块
- static{
- Father f=new Son();
- f.first(4);
- }
- int punk(int sum){
- sum=sum;
- return sum;
- }
- //子类中的自由块
- {
- System.out.println("曾经沧海难为水,除却巫山不是云");
- }
- public static void main(String argsp[]){
- Son son=new Son(new Son());
- }
- }
- //输出结果为:
- 2010年新年快乐
- 菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
- 美好的一天
- 曾经沧海难为水,除却巫山不是云
- 4
- 菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
- 美好的一天
- 曾经沧海难为水,除却巫山不是云
- 菩提本无树,明镜亦非台,本来无一物,何处惹尘埃
- 美好的一天
- 曾经沧海难为水,除却巫山不是云
- 8