Java代码块

Java代码块

在java中用{}包裹起来的称为代码块初始化块

代码块又称初始化块,是类的一部分(代码块+成员变量+成员方法+构造器+内部类)

代码块在随着类的加载或对象的创建而被隐式调用

语法

[修饰符]{

	代码

};

分类

根据代码块的位置和声明不同,可以分为:

1、局部代码块

用于限定变量声明周期,及早释放,提高内存利用率

public class test{
    public static void main(String args[]){
     	//局部代码块   
        {
            System.out.println("执行局部代码块");
            int n = 100;
        }
        //代码块内部定义得变量外部无法访问
    	System.out.println(n)
    }
}
注意
  • 代码块内部定义得变量外部无法访问

2、静态代码块

需要static修饰,必须放在类中,而不能是方法,当类被jvm加载时会执行(只会被执行一次)。

public class javaStudy02 {
    public static String name;

    static{
        System.out.println("执行静态代码块");
        name = "zs";
    }

    public static void main(String[] args) {
        System.out.println("执行main方法");
        System.out.println(name);
    }
}

特点
  • 每次执行类,加载类的时候都会先执行一次静态代码块。
  • 静态代码块的执行是自动触发的,一旦程序启动就会执行一次。
  • 一般用于初始化静态资源。
  • 静态代码块可以调用该类中的任意静态成员。

3、构造代码块

没有static修饰,必须放在类下,而不能是方法,与对象初始化一同加载,即每次调用构造方法前都会执行

public class javaStudy01 {
    private int n;
    
    {
        System.out.println("构造器代码块执行");
        int n = 100;
    }

    //有参
    public javaStudy01(int n){
        this.n = n;
    }
    
    //无参
    public javaStudy01(){}
    
    

    public static void main(String[] args) {
        new javaStudy01(100);
    }
}

执行结果:

构造器代码块执行
构造器代码块执行
100

注意
  • 构造代码块和局部代码块的区别是类中有无构造器,没有构造器就是局部代码块,有构造器是构造代码块(放在构造器前后都行)
  • 构造代码块可以将所有构造器都需要执行的代码都放在其中,从而减少代码重复。(即当多个构造器中有相同的语句时,可以将相同的语句放到构造代码块中)
  • 每次调用构造方法时都会执行一次(因此,该代码块就与类的加载没什么关系了)
  • 构造代码块可以调用类中任意成员(注意与静态代码块比较区分)
静态代码块、构造代码块、构造函数执行顺序

父类静态代码块 > 子类静态代码块 > main()方法 > 父类构造代码块 > 父类构造器 > 子类构造代码块 > 子类构造器

4、同步代码块

同步代码块指的是被Java中Synchronized关键词修饰的代码块,在Java中,Synchronized关键词不仅仅可以用来修饰代码块,与此同时也可以用来修饰方法,是一种线程同步机制,被Synchronized关键词修饰的代码块会被加上内置锁。


public class Test4 implements Runnable {
    @Override
    public void run() {
        synchronized (CodeBlock.class) {
            System.out.print("同步代码块...");
        }
    }
 
    public static void main(String[] args) {
        CodeBlock a = new CodeBlock();
        CodeBlock b = new CodeBlock();
        new Thread(a).start();
        new Thread(b).start();
    }
}

原文:https://blog.youkuaiyun.com/SakuraMG/article/details/128228382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值