Java基础13: 代码块

1.   普通代码块:方法中的代码块, 不能单独执行, 必须调用方法才能执行

2.   构造代码块:在类中, 没有任何前缀和后缀, 使用"{}"包起来的代码块

3.   静态代码块:在类型,使用static修饰,并使用"{}"包起来的代码块

4.   同步代码块:使用synchronized修饰,并使用"{}"包起来的代码块

public class UserTest {

   private int id;

   private String name;

   public static AtomicInteger count = new AtomicInteger(0);//统计实例化数量

    {

       count.getAndIncrement();

       System.out.println("构造代码块 count =" + count);

   }

   static {

        String str = "静态代码块执行...";

        System.out.println(str);

   }

   public UserTest() {

       this(count.get() + 1, "name"+(count.get() + 1));

       System.out.println("UserTest()....");

   }

   public UserTest(int id) {

       this.id = id;

       System.out.println(String.format("UserTest(%s)....", id));

   }

   public UserTest(int id, Stringname) {

       this.id = id;

       this.name = name;

       System.out.println(String.format("UserTest(%s,%s)....", id, name));

   }

   public static void main(String[] args) {

       new UserTest(1);

       new UserTest(2);

       new UserTest(3, "name3");

       new UserTest();

   }

}

运行结果:

    静态代码块执行...

    构造代码块 count = 1

    UserTest(1)....

    构造代码块 count = 2

    UserTest(2)....

    构造代码块 count = 3

    UserTest(3, name3)....

    构造代码块 count = 4

    UserTest(4, name4)....

    UserTest()....

 

运行过程分析:

    1. 在实例化一个对象之前, 先执行静态代码块, 而且只执行一次, 可以用来实例化全局变量, 用来做单例模式等等

    2. 每次实例化一个对象之前, 都要先执行构造代码块, 所以可以把构造函数中通用的代码提取出来, 可以用来统计实例化次数等等

    3. 如果构造函数调用了this()方法, 那么该构造函数不执行构造代码块, 被调用的构造方法中会执行构造代码块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值