静态代码块、代码块、构造函数、匿名内部类、匿名内部类中的代码块

VO.java

public class VO {

    // 唯一测试用属性
    private int age;

    // 普通代码块
    {
        System.out.println("VO 普通代码块...");
    }

    // 静态代码块
    static {
        System.out.println("VO 静态代码块...");
    }

    // 无参构造函数
    public VO() {
        super();
        System.out.println("VO 无参构造函数....");
    }

    // 有参参构造函数
    public VO(int age) {
        super();
        this.age = age;
        System.out.println("VO 有参参构造函数....");
        System.out.println("VO 有参构造函数中的 age = " + this.age);
    }

    // getters/setters
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "VO [age=" + age + "]";
    }

}

Test.java

/**
 * 静态代码块、代码块、构造函数、匿名内部类、匿名内部类中的代码块
 */
public class Test {

    // 普通代码块
    {
        System.out.println("Test 普通代码块....");
    }

    // 静态代码块
    static {
        System.out.println("Test 静态代码块....");
    }

    // main方法
    public static void main(String[] args) {
        // 声明
        VO vo = null;

        // 匿名内部类
        vo = new VO(21) { // 匿名内部类,继承VO对象。

            // 匿名内部类中的普通代码块
            {
                System.out.println("匿名内部类 普通代码块....");

                // 年龄增加10
                this.setAge(this.getAge() + 10);
            }

            /*
            // 匿名内部类中的静态代码块, 编辑不能通过
            static { }
            */

        };

        System.out.println(vo); // VO [age=31]
    }

}

执行main方法后的打印结果:

Test 静态代码块....
VO 静态代码块...
VO 普通代码块...
VO 有参参构造函数....
VO 有参构造函数中的 age = 21
匿名内部类 普通代码块....
VO [age=31]

得到的结论:

总结:
========================================================================
1)静态代码块:即便不构造对象也会执行,它在类加载的时候就会执行.
		证据:没有构造(new)Test对象,但是Test类中的静态代码块执行了。

2)普通代码块:只会在构造对象的时候执行。
		证据:Test类中的普通代码块没有执行,而VO类中的普通代码块执了。

3)虽然普通代码块是在构造对象的时候执行,但是普通代码块的执行时机是早于构造函数的执行时机的。
		证据:VO普通代码块先执行,VO有参参构造函数再执行。

4)匿名内部类中的代码块执行时机在匿名内部类的父类的构造函数执行之后。
		证据:VO有参参构造函数先执行,匿名内部类普通代码块再执行。

5)匿名内部类不仅可以继承抽象类,接口,也可以继承一个普通类。
		证据:如本例,匿名内部类不是实现或重写父类的方法,而是增加了一个普通代码块。执行时机在父类的构造函数之后。

6)匿名内部类中不可以写静态代码块。
		证据:Eclipse中直接编辑不能通过。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值