Java编程中的4种代码块详解

作者:编程之路 时间:2022-01-04 03:10:20 

在Java编程中,代码块就是指用“{}”括起来的代码。下面看一下这四种代码块。

1、普通代码块

就是指类中方法的方法体。


public void xxx(){
     //code
 }

2、构造块

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


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

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

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

3、静态块

下面用static"{}"括起来的代码片段,只会在第一次加载此类时,仅执行一次,并且静态块优先于构造块执行。


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--);
               }
           }
         }
   }
}

来源:https://www.cjavapy.com/article/4/

标签:Java编程,代码块
0
投稿

猜你喜欢

  • java实现倾斜水印铺满整张图

    2023-12-24 22:34:21
  • Android启动页出现白屏、黑屏的解决方案

    2022-08-23 21:11:52
  • Java Set集合及其子类HashSet与LinkedHashSet详解

    2023-11-26 11:39:35
  • C#实现获取Excel中图片所在坐标位置

    2021-10-14 23:36:18
  • Android实现下拉展示条目效果

    2021-09-29 21:00:42
  • c#数据绑定之linq使用示例

    2022-07-17 11:07:22
  • 使用JMX连接JVM实现过程详解

    2022-07-25 23:05:45
  • Android实现webview实例代码

    2022-05-28 13:32:32
  • Android实现支持所有View的通用的下拉刷新控件

    2022-07-29 10:40:36
  • 详解C语言求两个数的最大公约数及最小公倍数的方法

    2022-02-28 01:17:25
  • java调用shell命令并获取执行结果的示例

    2021-07-06 06:17:54
  • Java实现部门员工管理

    2021-07-21 21:40:41
  • Java数组(Array)最全汇总(上篇)

    2022-12-19 23:22:30
  • Android通知栏前台服务的实现

    2022-10-13 22:57:46
  • android多媒体类VideoView使用方法详解

    2023-12-12 03:37:47
  • 为SpringBoot服务添加HTTPS证书的方法

    2023-10-11 03:03:22
  • 关于mybatis resulttype 返回值异常的问题

    2021-08-09 20:26:19
  • Java 抽象类特点总结

    2023-07-28 10:39:46
  • 简单谈谈SpringMVC转发和重定向的区别

    2023-03-12 11:07:52
  • Eclipse运行android项目报错Unable to build: the file dx.jar was not loaded from the SDK folder的解决办法

    2023-06-14 15:28:30
  • asp之家 软件编程 m.aspxhome.com