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

分析一段代码:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值