A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 絮缘小默 中级黑马   /  2014-2-26 21:53  /  961 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态初始化块儿和普通初始化块儿都是怎么被调用的

6 个回复

倒序浏览
静态块在第一个对象创建时运行
初始化块在每个对象创建时运行
区别是静态块只执行一次,操作的内存在静态区
初始化块每个对象构造时都需要执行一次,操作的内存在用户区

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
static模块在类加载中首先会被加载且只会被加载一次,初始化块可以多次加载
回复 使用道具 举报
咖啡@糖豆 发表于 2014-2-26 22:44
static模块在类加载中首先会被加载且只会被加载一次,初始化块可以多次加载
...

类是在什么时候被加载的了?是在该类的第一个对象创建的时候加载的,还是在更早的时候?
回复 使用道具 举报
不再散步 发表于 2014-2-26 22:54
类是在什么时候被加载的了?是在该类的第一个对象创建的时候加载的,还是在更早的时候? ...

我认为是更早,在java的虚拟机中应该是类先加载,然后静态就已经初始化完毕了
回复 使用道具 举报
静态代码块是在类加载的时候执行的,而普通代码块是在实例化的时候执行的。不论创建多少实例,静态代码块都只执行一次。而普通代码块在每次创建对象的时候都会被调用。
  1. //代码如下:
  2. //Test.java
  3. package test012.zzh.bean;

  4. public class Test {
  5.         static int x=0,z=0;
  6.         static int y=0;
  7.         {
  8.                 System.out.println("我是普通构造代码块,x="+x++);
  9.         }
  10.         static{
  11.                 System.out.println("我是静态代码块,y="+y++);
  12.         }
  13.         public Test(){
  14.                 System.out.println("我是构造方法,z="+z++);               
  15.         }
  16. }

  17. //TestDemo.java
  18. package test012.zzh.bean;

  19. public class TestDemo {
  20.         public static void main(String args[]){
  21.                 Test test1=new Test();
  22.                 Test test2=new Test();
  23.                 Test test3=new Test();
  24.         }
  25. }

  26. 输出结果:
  27. 我是静态代码块,y=0
  28. 我是普通构造代码块,x=0
  29. 我是构造方法,z=0
  30. 我是普通构造代码块,x=1
  31. 我是构造方法,z=1
  32. 我是普通构造代码块,x=2
  33. 我是构造方法,z=2
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
普通初始化块:给对象进行初始化,对象已建立就运行而且优先于构造函数
静态代码块:随着类的加载而执行,只执行一次,用于给类进行初始化

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马