关于 static 静态代码块的一点东西 静态代码块(static block ),不包含在任何方法体中当类被载入时,自动执行静态代码块,且只被执行一次经常用于类属性的初始化。 这是网上通行的关于静态代码块的定义。 在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下: 在Java编程语言中,`static`关键字用于声明类级别的成员,包括静态变量和静态代码块。静态代码块,也就是`static block`,是Java中的一种特殊构造,它不包含在任何方法内,当类被加载时,静态代码块会被自动执行且仅执行一次。这个特性使得静态代码块成为初始化类静态变量的理想选择。 类加载的过程是Java虚拟机(JVM)运行时的关键部分。当类被加载时,会经历以下三个主要步骤: 1. **装载**:此阶段JVM寻找并导入类或接口的二进制数据。这通常是通过类装载器完成的,类装载器负责从磁盘、网络或其他来源读取字节流。 2. **链接**:链接阶段包括三个子步骤: - **校验**:验证导入的二进制数据是否符合Java语法规则,确保类的正确性,避免潜在的运行时错误。 - **准备**:为类的静态变量分配内存空间,并赋予默认值。例如,`int`类型的静态变量会被初始化为0。 - **解析**:将符号引用转换为直接引用。这一步骤可以延迟到类或接口实际被使用时进行,称为延迟绑定或懒解析。 3. **初始化**:JVM执行类的初始化,包括激活类的静态变量初始化和静态代码块。此时,类的静态成员会被真正地初始化为它们的指定值。 单态设计模式(Singleton Pattern)是一种常见的软件设计模式,它的目标是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处包括资源管理的有效性、性能优化以及简化多线程环境下的同步控制。在Java中,实现Singleton通常有两种方式: 1. **饿汉式(Eager Initialization)**:在类加载时就创建了唯一实例,即静态变量在类加载时被初始化。这种方式简单且线程安全,但可能会造成不必要的内存占用。 ```java public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 2. **懒汉式(Lazy Initialization)**:只有在首次调用`getInstance()`方法时才创建实例。为了保证线程安全,通常使用`synchronized`关键字,但这样会降低性能。 ```java public class Singleton { private static Singleton instance = null; public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } private Singleton() {} } ``` 更高级的实现,如双重检查锁定(Double-Checked Locking, DCL),试图在提高性能的同时保证线程安全。然而,DCL在早期的Java版本中由于并发问题并不总是安全的,但在Java 5之后引入的内存模型改进已经解决了这个问题。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 在实际应用中,Singleton模式需要注意的一些问题包括: - 在多线程环境下,必须确保初始化过程的线程安全性,避免出现多个实例。 - 当类加载器不同,同一个类可能会被加载多次,导致多个Singleton实例的产生。因此,在分布式系统或者EJB等环境中,需要特别留意这一点。 - 如果Singleton需要在类装载时执行特定初始化操作,可以考虑使用静态代码块来完成。 静态代码块和Singleton模式都是Java编程中不可或缺的概念。理解它们的工作原理和应用场景,对于编写高效、可靠的代码至关重要。
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/octet-stream](https://img-home.csdnimg.cn/images/20210720083646.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 3
- 资源: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 打包和分发Rust工具.pdf
- SQL中的CREATE LOGFILE GROUP 语句.pdf
- C语言-leetcode题解之第172题阶乘后的零.zip
- C语言-leetcode题解之第171题Excel列表序号.zip
- C语言-leetcode题解之第169题多数元素.zip
- ocr-图像识别资源ocr-图像识别资源
- 图像识别:基于Resnet50 + VGG16模型融合的人体细胞癌症分类模型实现-图像识别资源
- C语言-leetcode题解之第168题Excel列表名称.zip
- C语言-leetcode题解之第167题两数之和II-输入有序数组.zip
- C语言-leetcode题解之第166题分数到小数.zip
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)