黑马程序员技术交流社区

标题: 黑马程序员—构造代码块、构造函数和静态代码块它们之..... [打印本页]

作者: 萍水相逢    时间: 2014-8-4 18:37
标题: 黑马程序员—构造代码块、构造函数和静态代码块它们之.....
本帖最后由 萍水相逢 于 2014-8-4 18:37 编辑

------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ----------
构造代码块:
{
    System.out.println("构造代码块执行!");
}
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
它和构造函数的区别:
构造代码块是给所有对象进行统一初始化。而构造函数是给对应的对象初始化。
构造代码块中定义的是不同对象共性的初始化内容。
静态代码块:
格式:static
{
       静态代码块中的执行语句。
}
特点:随着类的加载而执行,只执行一次。
用于给类进行初始化的。
代码:
  1. class Test {
  2.         // 构造函数
  3.         Test() {
  4.                 System.out.println("b");
  5.         }

  6.         // 静态代码块
  7.         static {
  8.                 System.out.println("a");
  9.         }
  10.         // 构造代码块
  11.         {
  12.                 System.out.println("c");
  13.         }
  14. }

  15. class TestDemo {
  16.         public static void main(String[] args) {
  17.                 Test t = new Test();
  18.         }
  19. }
复制代码
执行结果是:a c b



作者: bbdeyouxang    时间: 2014-8-4 21:47
三者的执行顺序还真没有注意过,受教了
作者: 贾浩田    时间: 2014-8-5 10:02
分析的很不错,收藏了
作者: yqj    时间: 2014-8-6 19:58
本帖最后由 yqj 于 2014-8-6 20:03 编辑

以前也没注意到,学习了
换成这样可能会更说明问题
  1. class Test {
  2.         // 构造函数
  3.         Test() {
  4.                 System.out.println("b");
  5.         }
  6.         // 构造代码块
  7.         {
  8.                 System.out.println("c");
  9.         }

  10.         // 静态代码块
  11.         static {
  12.                 System.out.println("a");
  13.         }
  14. }
  15. public class TestDemo {
  16.         public static void main(String[] args) throws Exception {
  17.                 Class.forName(Testtt.class.getName()); //加载类
  18.                 System.out.println("-------------");
  19.                 Test t = new Test();
  20.                 System.out.println("-------------");
  21.                 Test t2 = new Test();
  22.         }
  23. }
复制代码

结果:
a
-------------
c
b
-------------
c
b


作者: 萍水相逢    时间: 2014-8-6 22:11
yqj 发表于 2014-8-6 19:58
以前也没注意到,学习了
换成这样可能会更说明问题

嗯,都差不多的
作者: Vaz    时间: 2014-8-6 22:22
我看过老毕的。
作者: 萍水相逢    时间: 2014-8-7 08:36
Vaz 发表于 2014-8-6 22:22
我看过老毕的。

嗯,这就是总结他那上面的
作者: 王石    时间: 2014-8-7 08:46
好像是先执行静态代码块  ,    在看看构造函数有没有属性 有成员属性就先初始化,没有就先执行构造代码块  仅供参考
作者: iefegend    时间: 2014-8-16 09:53
黑马的视频中也有哦,,好像很全面的哦,,:)




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