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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTTP、HTTPS常用的默认端口号

    HTTP、HTTPS常用的默认端口号端口号标识了一个主机上进行通信的不同的应用程序。1.HTTP协议代理服务器常用端口号:80/8080/3128/8081/90982.SOCKS代理协议服务器常用端口号:10803.FTP(文件传输)协议代理服务器常用端口号:214.Telnet(远程登录)协议代理服务器常用端口号:23HTTP服务器,默认端口号为80/tcp(木马Executor开放此端口)HTTPS(securelytran…

    2022年6月14日
  • linux安装在固态盘性能差_固态硬盘格式化不了

    linux安装在固态盘性能差_固态硬盘格式化不了##磁盘尽可能恢复到从未被使用且不包含任何数据的状态检查磁盘Security状态给该磁盘设定一个密码执行secureerase命令上述方法可以尽可能的将硬盘恢复到新盘无数据状态检查磁盘Security状态hdparm-I/dev/sdc检查磁盘security状态,如果frezen直接热插拔,然后再次检查该磁盘状态,如果状态切换到了notfrozen则可以进行secureerase操作给该磁盘设定一个密码使用命令“hdparm–user-masteru–security-s

    2022年9月15日
  • SwipeRefreshLayout的基本使用「建议收藏」

    SwipeRefreshLayout的基本使用「建议收藏」SwipeRefreshLayout的基本使用简介SwipRefreshLayout是谷歌前一段时间推出的一款下拉刷新控件。常用方法方法解释setColorSchemeResources(int…colorReslds)设置下拉进度条的颜色主题,参数可变,并且是资源id,最多设置四种不同的颜色。setProgressBackgroundSchemeResource(intcoloRes)设置下拉进度条的背景颜色,默认白色。isRefreshing()判断当前的

    2022年6月25日
  • java VM option

    -Xms256m-Xmx256m-XX:MaxNewSize=256m-XX:MaxPermSize=256m

    2022年4月9日
  • ubuntu查看端口是否打开

    ubuntu查看端口是否打开安装netcatsudoapt-getinstallnetcat检测端口#nc-zvipportnc-zv192.168.1.1522

    2022年10月23日
  • springMVC执行流程及原理

    springMVC执行流程及原理spring的MVC执行原理1.springmvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet请请求提交到目标Controller4.Controller进行

    2022年6月28日

发表回复

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

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