黑马程序员技术交流社区

标题: 关于构造函数,构造代码块,静态代码块 [打印本页]

作者: ameanboy    时间: 2016-3-22 23:42
标题: 关于构造函数,构造代码块,静态代码块
本帖最后由 ameanboy 于 2016-3-22 23:55 编辑

前一段时间这部分概念非常的迷,最近理了一下,代码说明下~其实挺简单的~~
  1. public class ConstructorAndConsChunk {
  2.    
  3.     private String name = "默认值";

  4.     public ConstructorAndConsChunk() {
  5.         name = "张三";
  6.         System.out.println("无参构造函数被执行");
  7.     }
  8.    
  9.    
  10.    
  11.     public ConstructorAndConsChunk(String name) {
  12.         super();
  13.         this.name = name;
  14.     }



  15.     public void print(){
  16.         System.out.println("执行了方法"+" "+name);
  17.     }
  18.    
  19.     {
  20.         System.out.println("构造代码块被执行"+name);
  21.     }
  22.    
  23.     static{
  24.         System.out.println("静态代码块被执行");
  25.     }
  26. }
复制代码


测试代码
  1. public class ConstructorTest {

  2.     public static void main(String[] args) {
  3.         System.out.println("主方法开始");   //以前最迷的就是这个部分,静态代码块在类加载到方法区的时候执行,且只执行一次
  4.         ConstructorAndConsChunk c = new ConstructorAndConsChunk();
  5.         c.print();
  6.         System.out.println("------------------------");
  7.         ConstructorAndConsChunk c1 = new ConstructorAndConsChunk("李四");
  8.         c1.print();
  9.     }

  10. }
复制代码

运行结果为:
  1. 主方法开始
  2. 静态代码块被执行
  3. 构造代码块被执行默认值
  4. 无参构造函数被执行
  5. 执行了方法 张三
  6. ------------------------
  7. 构造代码块被执行默认值
  8. 有参构造被执行
  9. 执行了方法 李四
复制代码
但是,如果在含有静态代码块的类里使用主方法,例如:
  1. public class ConstructorAndConsChunk {

  2.     private String name = "默认值";

  3.     public static void main(String[] args) {
  4.         System.out.println("主方法被执行");
  5.         ConstructorAndConsChunk c = new ConstructorAndConsChunk();
  6.         c.print();
  7.     }

  8.     public ConstructorAndConsChunk() {
  9.         name = "张三";
  10.         System.out.println("无参构造函数被执行");
  11.     }

  12.     public ConstructorAndConsChunk(String name) {
  13.         System.out.println("有参构造被执行");
  14.         this.name = name;
  15.     }

  16.     public void print() {
  17.         System.out.println("执行了方法" + " " + name);
  18.     }

  19.     {
  20.         System.out.println("构造代码块被执行" + name);
  21.     }

  22.     static {
  23.         System.out.println("静态代码块被执行");
  24.     }

  25. }
复制代码
那么执行结果变成:
  1. 静态代码块被执行
  2. 主方法被执行
  3. 构造代码块被执行默认值
  4. 无参构造函数被执行
  5. 执行了方法 张三
复制代码
所以:静态代码块总是在类加载的时候执行且执行一次,如果与主方法处于同一个类,那么先于主方法执行
构造代码块在每次创建对象的时候都会执行





作者: ambition1    时间: 2016-4-9 22:15
.看了你发的帖子,感觉你很有想法.你入学流程走到哪里了?




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