Java 编程中的四种代码块

在 Java 编程中,代码块是基于大括号 {} 定义的,用于组织代码逻辑。可以将代码组织成逻辑组、定义局部变量、实现控制流、执行初始化或清理任务。

1、普通代码块

普通代码块位于方法内部,用于限制变量的作用域或简化程序逻辑。它们通常用于控制流程语句(如 if、for、while 等)中。

public void xxx(){ 
      //code 
  } 

2、构造块

构造块在每次创建类的实例时执行。它在构造方法执行前运行,通常用于初始化实例变量。下面用“{}”括起来的代码片段,构造块在创建对象时会被调用,每次创建对象时都会被调用,并且优先于类构造函数(包括有参和无参的)执行。 构造块中定义的变量是局部变量。

public class Client {
    {//构造代码块
        System.out.println("执行构造代码块");
    }

    publicClient() {
        System.out.println("执行无参构造函数");
    }

    publicClient(String string) {
        System.out.println("执行有参构造函数");
    }
}

3、静态块

静态代码块(也称为静态初始化块)在类加载时执行一次。它通常用于静态变量的初始化。

public class Demo
{
    public Demo()
    {
        System.out.print("默认构造方法!-->");
    }

//构造代码块

{
    System.out.print("构造代码块!-->");
}

//静态代码块
static
{
    System.out.print("静态代码块!-->");
}

public static void test()
{
    {
        System.out.println("普通方法中的代码块!");
    }
}
}
public static void main(String[]args)
{
    Demo d = new Demo();
    d.test();
}
/*
运行输出结果是:
静态代码块!-->构造代码块!-->默认构造方法!-->普通方法中的代码块!
*/

4、同步代码块

同步代码块用于多线程编程,确保同一时间只有一个线程执行该代码块。它通过在对象上加锁来实现。下面使用synchronized(obj){}括起来的代码块,在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则会导致数据的不一致。常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁如果被占用了,则阻塞,实现了互斥访问共享资源。而synchronized也是有代价的。一个常见的场景是,一个冗长的方法中,其实只有一小段代码需要访问共享资源,这时使用同步块,就只将这小段代码写在synchronized  block,既能够实现同步访问,也能够减少同步引入的开销。 同步代码块须写在方法中。

class Ticket implements Runnable //extends Thread
{
    object obj=new object();//共享对象,用来记录是否有其它进程在访问
    private static int tick=100;
    public void run()              /*不能在这写同步函数,否则其它线程用不了,需要单独写一个同步函数*/
    {
        while(true)
        {   synchronized(obj)
            {
                if(tick>0)
                { 
                    try
                    {
                        Thread.sleep(10);   /*每次运行就沉睡一下*/
                    }
                    catch(Exception e)
                    {
                        
                    }
                    System.out.println(Thread.currentThread().getName()+"sale:--"+tick--);
                }
            }
          }
    }
}
推荐阅读
cjavapy编程之路首页