静态变量初始化方式:

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静态变量初始化时机相关推荐

  1. java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈

    Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...

  2. java静态变量初始化顺序,赶快收藏备战金九银十!

    1. Redis面试专题 绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知.这里以面试题的形式 ...

  3. Java静态变量的初始化

    Java静态变量的初始化 C/C++在脑海中的印象太深了,以至于一看到 static 的变量(Java中叫做:域),本能的以为它一旦初始化就不能改变了. 原来Java在还有 final . 转自:ht ...

  4. java 静态变量生命周期(类生命周期)

    java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...

  5. Java 静态变量生命周期

    Java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...

  6. JAVA 静态变量与静态方法

    java中静态变量和静态方法分别有什么特点? 悬赏分:0 - 解决时间:2006-4-10 10:28 提问者: vv_clear - 二级 最佳答案 为什么问了两次?再贴上另一篇 Thinking: ...

  7. 多线程中局部静态变量初始化的陷阱

    C++当中常常需要一个全局唯一的对象实例,这时候,我们就会想到单件模式.如何实现这一模式?全局变量当然是一个简单可行的方法,然而,这太丑陋.嗯,其实,丑陋倒也罢了,最严重的是它将引诱程序员滥用全局变量 ...

  8. java静态变量、静态方法、代码块、main方法

    文章目录 一.类变量 / 静态变量(static) 二.类方法 / 静态方法(static) 三.main方法 四.代码块 (一)static代码块 (二)普通代码块 五.属性初始化.代码块.构造器的 ...

  9. Java Static 变量初始化

    目录 Java Static 变量初始化 直接赋值 static块初始化 实例方法初始化 解决方案 Java Static 变量初始化 static变量初始化方式 直接赋值 static块初始化 实例 ...

最新文章

  1. php采集百度推荐词,php抓取百度快照、百度收录、百度热词程序代码_PHP教程
  2. Windows下的网卡Teaming
  3. CSS3新的鼠标样式介绍
  4. 【必看】运维是“越老越吃香“的职业?
  5. springmvc国际化
  6. 秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量
  7. 漂浮窗口拖动杂谈(续)
  8. opencv 分割边界_电影观众:场景边界分割
  9. 视力差,不要怕!PNAS:服用超长链多不饱和脂肪酸可显著改善视觉和视网膜功能!...
  10. word转pdf出现空白页||去除PDF中的指定页
  11. 回复博友:初学ERP的建议
  12. php android 乱码,如何解决android php 中文乱码问题
  13. elementui表单校验原始密码_玩转表单交互,提升用户体验
  14. Atitit.报名模块的管理
  15. 国际h2真假u盘测试软件,u盘速度测试软件H2TEST
  16. C语言程序设计第四次作业-选择结构(2)
  17. 乾天驭爪——智能空中作业机器人
  18. 论文阅读笔记--Federated Continual Learning with Weighted Inter-client Transfer
  19. (C++题目)定义一个描述学生基本情况的类Student,数据成员包括姓名、学号、英语成绩和高数成绩;成员函数包括构造函数、析构函数、获取姓名、获取学号、求出平均成绩,以及显示各
  20. 匿名内部类的格式和理解

热门文章

  1. dns域名解析基础配置
  2. 火锅店搞活动火遍全国,但是不到一个月就关门了,到底是什么原因
  3. 数字版权管理市场现状研究分析与发展前景预测报告
  4. UE4 C++ 笔记
  5. 基于RT-Thread Studio 和小熊派 实现智慧农业
  6. 时间序列数据库TSDB排名
  7. 李宏毅《机器学习》Task02 - 回归
  8. 通过sendmail服务器配置域外转发到qq邮箱
  9. 石墨烯 量子计算机,打假!2021年,请放过“量子”和“石墨烯”
  10. WPF DataGrid简单使用