Java静态变量初始化时机
静态变量初始化方式:
1.声明时初始化;
2.静态块中初始化;
测试:
package com.skymr.learn;
/*** 静态变量初始化顺序测试* @author skymr**/
public class InstanceTest2 {static int b = 11;static{a = 20;b = 22;}static int a = 10;public static void main(String[] args) throws Exception{System.out.println("a="+InstanceTest2.a);System.out.println("b="+InstanceTest2.b);}
}
结果:
a=10
b=22
测试证明:1,2的先后顺序依靠代码的前后排列
问题:静态变量的初始化是什么时候开始的呢?
package com.skymr.learn;
/*** 静态变量初始化顺序测试* @author skymr**/
public class InstanceTest2 {static int b = 11;static{System.out.println("静态块");a = 20;b = 22;}static int a = 10;public static void nop(){}}
Main方法移出来了
package com.skymr.learn;public class MainTest {
public static void main(String[] args) throws Exception{
System.out.println("main方法开始"); //step1
InstanceTest2.nop();//step2
System.out.println("main方法开始--");//step3
System.out.println("a="+InstanceTest2.a);
System.out.println("b="+InstanceTest2.b);
}
}
打印结果:
main方法开始
静态块
main方法开始--
a=10
b=22
分析:执行step1时InstanceTest2类还没有装载进内存,也就没有运行它的静态块代码;
当调InstanceTest2.nop方法时,开始将InstanceTest2类载入内存,装载完成后开始自动运行静态变量的声明代码和静态块
也就是说静态变量是在载入内存后初始化的;
再一示例:
package com.skymr.learn;public class InstanceTest3 {public static void main(String[] args){Person son = new Person(5);System.out.println(son.parent.value);System.out.println(son.value);}
}class Person{final static Person parent = new Person(2); //1static int age = 30; //2int value;public Person(int delta){value = age + delta;}
}
打印 出:
2
35
分析:new Person时最先执行 1,此时age=0, 所以son.parent.value = 0 + 2 = 2;
执行完2后,才会进行son的构造方法,所以age = 30;value也就为35了.
Java静态变量初始化时机相关推荐
- java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈
Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...
- java静态变量初始化顺序,赶快收藏备战金九银十!
1. Redis面试专题 绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里以面试题的形式 ...
- Java静态变量的初始化
Java静态变量的初始化 C/C++在脑海中的印象太深了,以至于一看到 static 的变量(Java中叫做:域),本能的以为它一旦初始化就不能改变了. 原来Java在还有 final . 转自:ht ...
- java 静态变量生命周期(类生命周期)
java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...
- Java 静态变量生命周期
Java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...
- JAVA 静态变量与静态方法
java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...
- 多线程中局部静态变量初始化的陷阱
C++当中常常需要一个全局唯一的对象实例,这时候,我们就会想到单件模式.如何实现这一模式?全局变量当然是一个简单可行的方法,然而,这太丑陋.嗯,其实,丑陋倒也罢了,最严重的是它将引诱程序员滥用全局变量 ...
- java静态变量、静态方法、代码块、main方法
文章目录 一.类变量 / 静态变量(static) 二.类方法 / 静态方法(static) 三.main方法 四.代码块 (一)static代码块 (二)普通代码块 五.属性初始化.代码块.构造器的 ...
- Java Static 变量初始化
目录 Java Static 变量初始化 直接赋值 static块初始化 实例方法初始化 解决方案 Java Static 变量初始化 static变量初始化方式 直接赋值 static块初始化 实例 ...
最新文章
- php采集百度推荐词,php抓取百度快照、百度收录、百度热词程序代码_PHP教程
- Windows下的网卡Teaming
- CSS3新的鼠标样式介绍
- 【必看】运维是“越老越吃香“的职业?
- springmvc国际化
- 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
- 漂浮窗口拖动杂谈(续)
- opencv 分割边界_电影观众:场景边界分割
- 视力差,不要怕!PNAS:服用超长链多不饱和脂肪酸可显著改善视觉和视网膜功能!...
- word转pdf出现空白页||去除PDF中的指定页
- 回复博友:初学ERP的建议
- php android 乱码,如何解决android php 中文乱码问题
- elementui表单校验原始密码_玩转表单交互,提升用户体验
- Atitit.报名模块的管理
- 国际h2真假u盘测试软件,u盘速度测试软件H2TEST
- C语言程序设计第四次作业-选择结构(2)
- 乾天驭爪——智能空中作业机器人
- 论文阅读笔记--Federated Continual Learning with Weighted Inter-client Transfer
- (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
- 匿名内部类的格式和理解