黑马程序员技术交流社区

标题: 初始化块 [打印本页]

作者: 絮缘小默    时间: 2014-2-26 21:53
标题: 初始化块
静态初始化块儿和普通初始化块儿都是怎么被调用的
作者: yunzhongzhuhuo    时间: 2014-2-26 21:58
静态块在第一个对象创建时运行
初始化块在每个对象创建时运行
区别是静态块只执行一次,操作的内存在静态区
初始化块每个对象构造时都需要执行一次,操作的内存在用户区
作者: 咖啡@糖豆    时间: 2014-2-26 22:44
static模块在类加载中首先会被加载且只会被加载一次,初始化块可以多次加载

作者: 不再散步    时间: 2014-2-26 22:54
咖啡@糖豆 发表于 2014-2-26 22:44
static模块在类加载中首先会被加载且只会被加载一次,初始化块可以多次加载
...

类是在什么时候被加载的了?是在该类的第一个对象创建的时候加载的,还是在更早的时候?
作者: 咖啡@糖豆    时间: 2014-2-26 23:17
不再散步 发表于 2014-2-26 22:54
类是在什么时候被加载的了?是在该类的第一个对象创建的时候加载的,还是在更早的时候? ...

我认为是更早,在java的虚拟机中应该是类先加载,然后静态就已经初始化完毕了
作者: 赵卓辉    时间: 2014-2-26 23:26
静态代码块是在类加载的时候执行的,而普通代码块是在实例化的时候执行的。不论创建多少实例,静态代码块都只执行一次。而普通代码块在每次创建对象的时候都会被调用。
  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
复制代码

作者: 李先洋    时间: 2014-2-26 23:35
普通初始化块:给对象进行初始化,对象已建立就运行而且优先于构造函数
静态代码块:随着类的加载而执行,只执行一次,用于给类进行初始化




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2