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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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