静态代码块+构造代码块+构造方法

来源:互联网 发布:美国经济数据gdp 编辑:程序博客网 时间:2024/05/01 08:30

分析一段代码:

public class Test1 {

     

           publicstatic Test1 t1=new Test1();

           publicstatic Test1 t2=new Test1();

           {

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

           }

           static{

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

           }

     

   public static void main(String[] args)throws IOException{

      Test1t=new Test1();

      }

}

输出结果:

构造块

构造块

静态块

构造块

    main方法是一个程序的入口,平时自己分析时只用到下面的四个栈、堆、静态域和常量池。这里也只针对下面四个存储区域进行分析

    栈主要是存放基本类型的变量数据和对象的引用,就是一些变量,比如t1、t2;堆就是存放所有new出来的对象;静态域是存放静态成员(static定义的); 常量池是存放字符串常量和基本类型常量(public static final)。平时分析也可以将静态域和常量池放在一个地方分析。

    现在分析一下本程序:

执行顺利是静态代码块>构造代码块>构造方法。其中静态属性>静态方法。程序运行,加载Test1类,首先将静态属性public static Test1 t1=new Test1();放入静态域,然后通过new在堆中产生一个对象,对象中只有构造代码块。可以把构造代码块理解成跟构造方法一样,自动加载。所以打印"构造块",然后执行public static Test1 t2=new Test1();打印"构造块"、最后执行静态代码块,打印"静态块"。然后执行静态方法,main,打印"构造块"。

可能分析的并不是很好,欢迎大家发言

1 0
原创粉丝点击