Java代码块基础

Java代码块有四种类型:

普通代码块(本地代码块)

实例代码块(构造代码块)

静态代码块

同步代码块(在多线程中使用,还未学习,学习以后再补充)


普通代码块

普通代码块使用较少,就是在方法中用大括号定义的一个代码块

class A{
    public int x;
    private int y;

    public static int z;
    {
        int x = 3;
        System.out.println("普通代码块"+x);
    }   
}
public class Test {
    public static void main(String[] args) {
        A a = new A();
    }
}

普通代码块会在每次对象实例化时被调用,结果如下:

构造代码块

构造代码块和普通代码块几乎没有区别,只是在构造代码块中要给类成员赋值,在语法上和普通代码块没有任何区别,在功能上就是类内成员初始化。

class A{
    public int x;
    private int y;

    {
        this.x = 1;
        this.y = 2;
        System.out.println("实例代码块"+x);
    }

}
public class Test {
    public static void main(String[] args) {
        A a = new A();
    }
}

构造代码块同样会在每次对象实例化时被调用,结果如下:

静态代码块

静态代码块与前面两个代码块有着显著区别,在语法上大括号前要加上static修饰符,在功能上和static函数一样,不能给类成员赋值,只能给static成员赋值,并且在多个对象实例化时只会被调用一次。而且由于静态成员是在JVM加载类时开辟空间并初始化的,所以静态代码块会先于普通代码块和构造代码块调用。

class A{
    public int x;
    private int y;

    public static int z;
    {
        int x = 3;
        System.out.println("普通代码块"+x);
    }

    {
        this.x = 1;
        this.y = 2;
        System.out.println("实例代码块"+x);
    }

    static {
        z = 3;
        System.out.println("静态代码块"+z);
    }
}
public class Test {
    public static void main(String[] args) {
        A a = new A();
        A a2 = new A();
    }
}

结果如下:

 可以看到静态代码块只调用了一次

其实关于静态代码块为什么只调用了一次的问题其实很好解释,因为类静态成员是一个类共有的属性,因此静态代码块也是为类服务的,并不是为了哪个成员,这就是静态代码块只调用一次的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一只三脚兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值