Java基础篇:四种代码块详解

Java基础篇:四种代码块详解

所谓代码块,就是用大括号{}将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法。一般来说,代码块是不能单独运行的,它必须有运行主体。在Java中代码块主要分为四种:普通代码块、静态代码块、同步代码块、构造代码块。

一、普通代码块:

普通代码块就是类中方法的方法体;普通代码块是不能够单独存在的,他必须紧跟在方法名后面,同时也必须使用方法名调用它。

public class Test {
    public void test(){
        System.out.println("普通代码块");
    }
}

二、静态代码块:

静态代码块就是用static修饰的用{}括起来的代码段,他的主要目的就是对静态属性进行初始化。静态代码块在第一次加载此类的时候被执行,并且只会执行一次,静态代码块优先优先于构造代码块执行。

public class Test {
    static{
        System.out.println("静态代码块");
    }
}

三、同步代码块:

同步代码块,就是使用synchronized关键字修饰的用{}括起来的代码片段,他表示同一时间只能有一个线程进入到该方法块中,是一种多线程保护机制。在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则会导致数据的不一致性,常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁,如果对象锁被占用了,则阻塞等待。synchronized实现了互斥访问共享资源,但synchronized也是有代价的,会造成系统性能的降低。

public class Test {
     synchronized(obj){ 
        System.out.println("同步代码块");
    } 
}

四、构造代码块:

构造代码块就是用{}括起来的代码片段,构造代码块会在创建对象时被调用,每次创建对象时会被调用,并且优先于类构造函数执行。构造代码块中定义的变量是局部变量。

new一个对象的时候总是先执行构造代码,在执行构造函数。但是有一点需要注意的是,构造代码块不是在构造函数之前运行的,它是依托构造函数执行的。正式由于构造代码块有这几个特性,所以它常用语如下场景:

1、初始化实例变量:

如果一个类中存在若干个构造函数,这些构造函数都需要对实例变量进行初始化,如果我们直接在构造函数中实例化,必定会产生很多重复代码,繁琐和可读性差。这时,我们可以充分利用构造代码块来实现,这是利用编译器会将构造代码块添加到每个构造函数中的特性。

2、初始化实例环境:

一个对象必须在适当的场景下才能存在,如果没有适当的场景,则就需要在创建对象时创建此场景,我们可以利用构造代码块来创建此场景,尤其是该场景的创建过程较为复杂的时候。

上面两个常用场景都充分利用构造代码块的特性,能够很好的解决在实例化对象时构造函数比较难解决的问题,利用构造代码不仅可以减少代码量,同时也是程序的可读性增强了。特别是当一个对象的创建过程比较复杂,需要实现一些复杂逻辑,这个时候如果在构造函数中实现逻辑,这是不推荐的,因为我们提倡构造函数要尽可能的简单易懂,所以我们可以使用构造代码封装这些逻辑实现部分。

参考博客:

https://blog.csdn.net/zhangzeyuaaa/article/details/16907921

https://blog.csdn.net/chenssy/article/details/14486833

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114679.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信群机器人怎么弄的_微信群机器人哪个好用

    微信群机器人怎么弄的_微信群机器人哪个好用实战预警,通过机器人实时监控,让你及时感知异常

    2022年8月16日
    3
  • PHP 中高级程序员面试模拟题

    PHP 中高级程序员面试模拟题

    2022年2月18日
    34
  • XML 在SQLServer中的使用

    XML 在SQLServer中的使用

    2021年11月25日
    45
  • Springboot Mybatis使用pageHelper实现分页查询[通俗易懂]

    Springboot Mybatis使用pageHelper实现分页查询[通俗易懂]以下介绍实战中数据库框架使用的是mybatis,对整合mybatis此处不做介绍。使用pageHelper实现分页查询其实非常简单,共两步:一、导入依赖;二、添加配置;三、应用;那么开始,第一步:pom.xml添加依赖:<!–分页插件pagehelper–><dependency><groupId>com…

    2022年6月2日
    41
  • Arcgis二次开发——发布地图

    Arcgis二次开发——发布地图简单发布地图1、测试arcgispro发布地图默认打开arcgispro的地图模板,点击“共享”=》“web地图”,填上相关信息,点击“共享”。完成之后,即可在arcgisonline里看到新发布的“maptest001”服务。2、在arcgisonline里查看发布的内容3、用arcgisjsapi的沙箱查看刚刚发布的地图注意设置:esriConfig.portalUrl=”arcgisonline的个人主页地址”portalItem的id就是你发布…

    2022年7月23日
    29
  • 门面模式 Facade「建议收藏」

    门面模式 Facade「建议收藏」门面模式Facade动机模式定义结构要点总结笔记动机上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化.这种过多的耦合面临很多变化的挑战如何简化外部客户端和系统间的交互接口呢?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦模式定义为子系统中的一组接口提供一个**一致(稳定)**的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)结构要点总结从客户程序的角度来看,Facade模式简化了整个

    2022年8月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号