Java 静态数据初始化的示例代码
无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值;如果它是一个对象引用,那么它的默认初始值就是null
class Bowl {
public Bowl(int marker) {
System.out.println("Bowl(" + marker + ")");
}
void f1(int marker) {
System.out.println("f1(" + marker + ")");
}
}
class Table {
static Bowl bowl = new Bowl(1);
public Table() {
System.out.println("Table()");
bowl2.f1(1);
}
void f2(int marker) {
System.out.println("f2(" + marker + ")");
}
static Bowl bowl2 = new Bowl(2);
}
class Cupboard {
Bowl bowl3 = new Bowl(3);
static Bowl bowl4 = new Bowl(4);
public Cupboard() {
System.out.println("Cupboard()");
}
void f3(int marker) {
System.out.println("f3(" + marker + ")");
}
static Bowl bowl5 = new Bowl(5);
}
public class StaticInit {
public static void main(String[] args) {
//第三步
System.out.println("Creating new Cupboard in main");
//第四步
//因为Cupboard内的静态变量已经初始化完成,所以不再初始化(无论创建多少个对象,静态数据都是只占用一份存储区域)
//但是里边的类成员变量 bowl3 还是需要进行二次初始化的,因为你这是new对象,所以打印 Bowl(3)
//然后调用该对象的无参构造函数,打印 Cupboard()
new Cupboard();
//第五步
System.out.println("Creating new Cupboard in main");
//第六步
//和第四步一样,执行初始化,打印 Bowl(3),然后调用无参构造函数,打印 Cupboard()
new Cupboard();
//第七步
table.f2(111);
//第八步
cupboard.f3(111);
}
//Java 数据类型、对象引用 和 构造器 之间的初始化顺序 https://www.sunjs.com/article/detail/debedcef327c4872933e0b2f1ac7cb71.html
//第1步:
//先初始化静态代码块、
//Table 类中也含有静态引用变量,所以先去执行bowl引用指向的对象的创建,所以先打印 Bowl(1)
//然后该类中还有一个静态对象,所以立即去初始化这个静态对象,然后打印 Bowl(2)
//执行完成以后,正式创建对象,执行Table类的默认无参构造函数,打印 Table()
//构造函数内 又使用静态变量bowl2 调用了其对象内的方法,所以打印 f1(1)
//到此这一行代码执行的初始化全部执行完毕
static Table table = new Table();
//第2步:
//初始化 Cupboard 类,因为 Cupboard 类中也含有两个静态对象,所以依次执行 Bowl(4) 和 Bowl(5)
//在执行Cupboard构造函数之前先执行变量初始化的规则,所以 bowl3 先执行,打印 Bolw(3)
//然后执行无参构造函数,打印 Cupboard()
//到此,这行代码的初始化全部执行完毕
static Cupboard cupboard = new Cupboard();
}
执行结果:
Bowl(1)
Bowl(2)
Table()
f1(1)
Bowl(4)
Bowl(5)
Bowl(3)
Cupboard()
Creating new Cupboard in main
Bowl(3)
Cupboard()
Creating new Cupboard in main
Bowl(3)
Cupboard()
f2(111)
f3(111)
以上就是Java 静态数据初始化的示例代码的详细内容,更多关于Java 静态数据初始化的资料请关注脚本之家其它相关文章!
相关文章
Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例
这篇文章主要介绍了Spring Boot 整合 Mybatis Annotation 注解的完整 Web 案例,需要的朋友可以参考下2017-05-05
springboot+idea+maven 多模块项目搭建的详细过程(连接数据库进行测试)
这篇文章主要介绍了springboot+idea+maven 多模块项目搭建的详细过程(连接数据库进行测试),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
Spring Boot条件注解之@ConditionalOnProperty完全解析
这篇文章主要介绍了SpringBoot中的@ConditionalOnProperty注解,通过配置文件属性值控制Bean或配置类的加载,实现功能开关和环境配置,文中通过代码介绍的非常详细,需要的朋友可以参考下2025-02-02
deepseek本地部署及java、python调用步骤详解
这篇文章主要介绍了如何下载和使用Ollama模型,包括安装JDK 17及以上版本和Spring Boot 3.3.6,配置pom文件和application.yml,创建Controller,以及使用Python调用模型,需要的朋友可以参考下2025-02-02
SpringBoot监听Redis key失效事件的实现代码
这篇文章给大家介绍了SpringBoot实现监听Redis key失效事件的方法,文中通过代码示例给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下2024-02-02


最新评论