2019-04-29

java中构造块的使用

在一个类中,如果一段语句没有放在方法里而是直接放在类中,则被称为构造块。

public class Test{
    {
          System.out.println("我是一个构造块");
    }
}

如上面代码的表示即为构造块。

当一个对象被创建时,构造块就会被调用。构造块的调用是从上往下的,如下面的代码所示,当对象Test被创建时,先执行A构造块,再执行B构造块。

public class Test{
     {
          //构造块A
     }
     {
          //构造块B
     }
}

构造块与构造器:
构造块相当于构造器内除了this以外的第一条被执行的语句,考虑到下面的代码:

public class Test{
    int a=10;
    {
      a=6;
    }
    public Test(){
      this(a);
    }
    public Test(int n){
      System.out.println(n);
      System.out.println(a);
    }
    public static void main(String[] args){
      Test t =new Test();
    }
}

其打印结果为10,6;因为Test()构造器被调用后,先执行this(a),此时a=10,所以Test(int n)中n的值为10;由于Test(int n)中不含this;所以执行构造块,a=6;所以打印的值为10,6。

如果构造块被static修饰,则其为静态块,和其他静态的成员一样,静态块是在类被加载时执行的,所以通常静态块的执行在主方法前。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,737评论 0 38
  • PHP-X是我在2017年年初创建的一个新项目。这个项目的目标就是让有一定工作经验的PHP程序都能够具备扩展开发的...
    大海244阅读 1,638评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,800评论 1 32
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 5,407评论 0 6
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 7,920评论 2 9