public class StaticTest

{

public static void main(String[] args)

{

staticFunction();

}

//静态声明

static StaticTest st = new StaticTest();

//静态代码块

static { System.out.println("1"); }

//代码块

{ System.out.println("2"); }

//构造函数

StaticTest()

{ System.out.println("3"); System.out.println("a="+a+",b="+b);

}

//静态方法

public static void staticFunction(){

System.out.println("4");

}

int a=110;

static int b =112;

}

console(控制台打印):

2

3

a=110,b=0

1

4

一般情况下:

Java中赋值顺序:

父类的静态变量赋值

自身的静态变量赋值

父类成员变量赋值和父类块赋值

父类构造函数赋值

自身成员变量赋值和自身块赋值

自身构造函数赋值

但有时候实例初始化不一定要在类初始化结束之后才开始初始化。

类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载。

只有在准备阶段和初始化阶段才会涉及类变量的初始化和赋值,因此只针对这两个阶段进行分析;

类的准备阶段需要做是为类变量分配内存并设置默认值,因此类变量st为null、b为0;

需要注意的是如果类变量是final,编译时javac将会为value生成ConstantValue属性,在准备阶段虚拟机就会根据ConstantValue的设置将变量设置为指定的值。

如果这里这么定义:static final int b=112,那么在准备阶段b的值就是112,而不再是0了。

那么问题来了,此时静态初始化过程还没完成就要初始化实例部分了。是这样么?

从人的角度是的。但从java的角度,一旦开始初始化静态部分,无论是否完成,后续都不会再重新触发静态初始化流程了。

因此在实例化st变量时,实际上是把实例初始化嵌入到了静态初始化流程中,并且在楼主的问题中,

嵌入到了静态初始化的起始位置。这就导致了实例初始化完全至于静态初始化之前。这也是导致a有值b没值的原因。```

java 静态对象new_java 静态 new 对象相关推荐

  1. 栈对象、堆对象、静态对象的比较

    栈对象的优势是在适当的时候自动生成,又在适当的时候自动销毁,不需要程序员操心:而且栈对象的创建速度一般较堆对象快,因为分配堆对象时,会调用operator new操作,operator new会采用某 ...

  2. 统一建模语言UML轻松入门(3)――静态建模:类和对象

    统一建模语言UML轻松入门(3)――静态建模:类和对象 --------------------------------------------------------------------- 宋宝 ...

  3. 静态锁 java_为什么锁定对象必须是静态的?

    使用私有静态只读对象来锁定多线程是很常见的 . 我知道私有通过收紧封装来减少锁定对象的入口点,因此可以访问最重要的内容 . 但为什么静止? private static readonly object ...

  4. Unity3D 对象池 静态预制件与动态单体

    Unity3D 对象池 静态预制件与动态单体 效果 整体思路 静态预制件对象池 对象池接口 对象池接口继承类 动态单体对象池 游戏里为了利用内存资源一般对象池是用的比较多 这里总结了两版对象池. 请结 ...

  5. Java动态代理和静态代理区别

    静态代理 package staticproxy;/*** 接口* @author newtouch**/ public interface IHello {public void sayHello( ...

  6. java查看对象锁级别_对象级别锁 vs 类级别锁(Java)

    前言 对于多线程(并发)和Spring Boot这两块在同步进行学习中,在看到使用synchronized关键字使操作同步时,看到和C#中不一样的东西,所以这里呢,就深入学习了下,若有错误之处,还望指 ...

  7. Java避免创建不必要的对象

    小Alan最近看到了<Effective Java>这本书,这本书包含的内容非常丰富,这本书我就不多介绍了,只能默默的说一句,作为一名java开发错过了这本书难免会成为一个小遗憾,所以还是 ...

  8. java 静态数据_Java 静态数据初始化的示例代码

    无论创建多少个对象,静态数据都只占用一份存储区域.static关键字不能应用于局部变量,因此它只能作用于域.如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值:如 ...

  9. java中静态是什么,java中静态和非静态有什么区别

    首先我们先来说说jvm内存模型: jvm内存分为:方法区.堆.栈和程序计数器. 下面我们来简单的说说方法区.栈和堆: 方法区:是各个线程共享的区域,存放类信息/常量/静态变量: 栈:其实每个线程都会分 ...

最新文章

  1. win10 远程登录 无密码用户
  2. jquery ajax自动完成,使用AJAX进行JQuery自动完成(JQuery Autocomplete with AJAX)
  3. HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)...
  4. 中文分词_中文分词最佳纪录刷新,两大模型分别解决中文分词及词性标注问题...
  5. uniapp保存图片_Uniapp实现保存图片到相册(封装起来)
  6. java 路径获取文件名称_java 根据文件获取文件名及路径的方法
  7. vue data数据修改_VUE的数据响应式
  8. jar 工程我怎么在网页上url访问某一个方法_Java高级编程之URL处理
  9. word2vec原理知识铺垫
  10. max/sup、min/inf辨析
  11. easydarwin ffmpeg
  12. 超有爱的并查集 6666
  13. 【机械仿真】基于matlab GUI曲柄摇杆机构运动仿真【含Matlab源码 1608期】
  14. 昨天写了一个小日历,日历显示一年的日历,暂时设定位2017年,分三个种代码...
  15. 自动驾驶系统进阶与项目实战(三)基于全卷积神经网络的点云三维目标检测和ROS实战
  16. 【web】【django】datatable的button扩展实现纯前端下载和copy指定列内容,以及django的HTTPResponse实现下载功能
  17. 在股票技术指标里,EMA和SMA 的区别
  18. 【C→C++】打开C++世界的大门
  19. 介绍计算机的英语作文大学,关于促销电脑的大学英语作文
  20. php定义常量的函数是,在PHP中定义常量的函数是( )。

热门文章

  1. 每日打卡 2017.04.02 博弈论专题
  2. Ubuntu 无法安装第三方软件的解决方法
  3. 最齐全的手镯3d打印模型素材,速来收藏
  4. 唤醒手腕51单片机学习笔记(第1期)基本知识、LED和轻触按键
  5. ABAQUS软件动力分析模块对钻柱-钻头-岩石系统进行仿真模拟
  6. RHEL本地存储管理:逻辑卷管理
  7. CentOs7.5 连接不上Xfp,XShell,防火墙未关闭
  8. MBB类似jquery.bxslider插件轮播效果
  9. java 金额转中文_Java实现 将数字金额转为大写中文金额
  10. 物理机上架设云服务器