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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Faith_Yee 中级黑马   /  2014-9-7 22:19  /  775 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


关于Java中的代码块

Java中除了构造方法以外提供了其他的初始化方式,这里说两种不同于C++风格的方式:

构造块,静态代码块。至于同步代码块以后再说。

先看下面例子:

public class Main{

    {

       System.out.println("构造块");

    }

   

    static{

       System.out.println("静态代码块");

    }

   

    public Main(){

       System.out.println("构造函数");

    }

   

    public static void main(String args[]){

       Main m;

    }

}

执行结果为:



静态代码块



为什么呢,程序里面只是申请了一个引用,但是并没有实例化,这说明构造方法和构造块都是在实例化时调用的,而静态代码块不是,分析内存知道,静态的并不属于对象,而是属于类,不论实例化多少对象,静态的内存只有一个,在出现声明引用的时候即分配内存!



再看下面例子:

public class Main{

    {

       System.out.println("构造块");

    }

   

    static{

       System.out.println("静态代码块");

    }

   

    public Main(){

       System.out.println("构造函数");

    }

   

    public static void main(String args[]){

       Main m=new Main();

    }

}



这个程序跟上面那个比较只是实例化了一个对象,为对象分配了内存,那么看执行结果:



静态代码块

构造块

构造函数



这个说明了一个问题:在程序执行过程中,静态代码块优于构造块,构造块优于构造函数执行。



再看下面代码:

public class Main{

    {

       System.out.println("构造块");

    }

   

    static{

       System.out.println("静态代码块");

    }

   

    public Main(){

       System.out.println("构造函数");

    }

   

    public static void main(String args[]){

       Main m=new Main();

       Main m1=new Main();

    }

}



此代码与上面代码相比较是实例化了两个对象,那么看执行结果:



静态代码块

构造块

构造函数

构造块

构造函数



此结果足以说明一个问题:静态代码块不论实例化多少对象,只调用一次!而其他的执行多次!

注:静态代码块是在main方法执行之前执行的!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马