上接深入java虚拟机——深入java虚拟机(二)——类加载器详解(上),在上一篇文章中,我们讲解了类的生命周期的加载和连接,这一篇我们接着上面往下看。

类的初始化:在类的生命周期执行完加载和连接之后就开始了类的初始化。在类的初始化阶段,java虚拟机执行类的初始化语句,为类的静态变量赋值,在程序中,类的初始化有两种途径:(1)在变量的声明处赋值。(2)在静态代码块处赋值,比如下面的代码,a就是第一种初始化,b就是第二种初始化

public class Test { public static int a = 0; public static int b ; static{ b=2; } }

静态变量的声明和静态代码块的初始化都可以看做静态变量的初始化,类的静态变量的初始化是有顺序的。顺序为类文件从上到下进行初始化,想到这,想起来一个很无耻的面试题,分享给大家看一下:

package com.bzu.csh; class Singleton { private static Singleton singleton = new Singleton(); public static int counter1; public static int counter2 = 0; private Singleton() { counter1++; counter2++; } public static Singleton getInstance() { return singleton; } } public class Test { public static void main(String[] args) { Singleton singleton = Singleton.getInstance(); System.out.println("counter1 = " + singleton.counter1); System.out.println("counter2 = " + singleton.counter2); } }

大家先看看这里的程序会输出什么?

不知道大家的答案是什么,如果不介意的话可以把你的答案写到评论上,看看有多少人的答案和你一样的。我先说说我刚开始的答案吧。我认为会输出:

counter1 = 1

Counter2 = 1

不知道大家的答案是不是这个,反正我的是。下面我们来看一下正确答案:

不知道你做对没有,反正我刚开始做错了。好,现在我来解释一下为什么会是这个答案。在给出解释之前,我们先来看一个概念:

Java程序对类的使用方式可分为两种

主动使用

被动使用

转载于:https://blog.51cto.com/javacsh/1129061

Java程序员从笨鸟到菜鸟之(九十四)深入java虚拟机(三)——类的生命周期(下)类的初始化...相关推荐

  1. Java程序员从笨鸟到菜鸟之(四)java开发常用类(包装,数字处理集合等)(上)

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 一:首谈Java中的包装类 Java为基本类型提供包装类,这使得任何接受对象的操作也可以用 ...

  2. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)...

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天, ...

  3. Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

    写在前面:由于前天项目老师建设局的项目快到验收阶段,所以,前天晚上通宵,昨天睡了大半天,下午我们宿舍聚会,所以时间有点耽误,希望大家见谅 上接: Java程序员从笨鸟到菜鸟之(四)java开发常用类( ...

  4. Java程序员从笨鸟到菜鸟之(十三)java网络通信编程

    首先声明一下,刚开始学习Java网络通信编程就对他有一种畏惧感,因为自己对网络一窍不通,所以...呵呵..你懂得,昨天又仔细的学习了一遍,感觉其实java网络编程也没想象的那么难,不信,咱一起看看.. ...

  5. Java程序员从笨鸟到菜鸟之(十二)java异常处理机制

    异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出 ...

  6. Java程序员从笨鸟到菜鸟之(四)练习

    练习1: /** 题目:考试成绩已经保存在数组scores中,依次为 89,23,64,91,119,52,73,-23要求:1)根据通过自定义方法来找出其中前三名,将数组成绩作为参数传入2)判断成绩 ...

  7. Java程序员从笨鸟到菜鸟之(四十四)细谈struts2(七)数据类型转换详解

     本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 Web应用程序的交互都是建立在HTTP之上的,互相传递的都是字符串.也就是说服务器接收到 ...

  8. Java程序员从笨鸟到菜鸟之(四十八)细谈struts2(十)ognl概念和原理详解

    引言:众所周知,在mvc中,数据是在各个层次之间进行流转是一个不争的事实.而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的: 1. 数据在页面上是一个扁平的,不带 ...

  9. Java程序员从笨鸟到菜鸟全部博客目录

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.NET/csh624366188 欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章 大 ...

  10. Java程序员从笨鸟到菜鸟之(序言)+全部链接

    http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主路线,想想这一年半,除去前半年几乎全玩了, ...

最新文章

  1. go防止多次递交表单
  2. 用泛型来实现编译时期的类型推断
  3. OpenJudge/Poj 1163 The Triangle
  4. 使用Javascript正则表达式来格式化XML内容
  5. inline-block,inline,block,table-cell,float
  6. 一场云计算基础设施的饕餮盛宴 --- OpenStack柏林峰会见闻及感想
  7. ICode python 3级训练场判断能量状态第19关
  8. 【随】BIDS 怪异现象
  9. HTTP中的status code什么意思
  10. 什么是Windows驱动程序?
  11. win7显示隐藏文件夹的方法
  12. 【华为OD机试真题 JS】两数之和绝对值最小
  13. 根据string查询是否是当月_发票勾选、查询、认证等25问!简直太全了!打印出来贴在桌子上学习!...
  14. 图论——最短路径之渡河问题
  15. 安装GD库 GD库安装全过程详解
  16. BIM自动识别三维地图:Revit自动识别三维地图流程方法
  17. Ubuntu 18下安装tensorflow(基于python3.6)
  18. [LeetCode周赛复盘] 第 314 场周赛20221009
  19. python选择题题目_【Python测试面试题】面试问题:《我的Padd… - 看准网
  20. 笔记本计算机无法打开,笔记本电脑开不了机怎么办 笔记本开不了机解决方法【详解】...

热门文章

  1. 图像视频处理中Win7 32位+VS2010+OpenCV2.3.1的配置过程
  2. Lanenet论文解读
  3. 炼丹手册——学习率设置
  4. 汇编和c语言函数的参数传递,c文件汇编后函数参数传递的不同之处
  5. 汉字字符内码查询_计算机等级考试查询系统
  6. hive 修改cluster by算法_spark、hive中窗口函数实现原理复盘
  7. java applet运行jmx,通过tomcat设置jvm及添加jmx远程访问、gc输出日志
  8. mysql运算中max计算_MySQL 聚合函数、运算符操作、约束
  9. 用感知器对样本分类的matlab程序_新的基础算法:树突网络:一个用于分类、回归和系统识别的白箱模块...
  10. stackexchange.mysql_StackExchange.Redis加载Lua脚本进行模糊查询的批量删除和修改