java中的静态代码块和构造代码块以及c#的静态构造函数

java版本:jdk1.8

IDE:idea 18

如下:

当子类被实例化时,执行顺序是这样的:

父类静态代码块=>子类静态代码块=>父类构造代码块=>父类构造函数=>子类构造代码块=>子类构造函数

当代码块有多个时,则按照书写顺序执行。

由于代码块是没有名字的,所以只会被自动执行,而且只执行一次,无法手动执行(区别于普通的方法和普通的静态方法)。

静态代码块不管类被实例化几次(包括子类),它都只会被执行一次,也就是说,在整个java程序运行环节,静态代码块里的代码,只会被执行一次。而构造代码块被执行的次数,取决于类和它的子类被实例化的次数,每实例化一次,就被执行一次。

在整个程序运行周期里,如果某个类未被使用,那么,它就不会被加载,也就不会执行它的静态代码块。

静态代码块和构造代码块,由于执行得比较早,所以常用于初始化类。具体该不该使用,要根据实际情况来衡量。

静态代码块只需要类被装载时就会被执行,因此如果你调用类中的静态方法,比如本例中的Test方法,它的静态代码块也会被执行,而不需要实例化类。静态代码块是先于构造函数执行的,因此无法使用该类中的非静态成员,这个编译器会提醒你,并不需要特别注意。我们需要关注的是它的使用场景,在使用之前要慎重考虑下用它是否合理,是否有更好的方案,毕竟放到spring大行其道的当下,用spring给你提供好的方案来解决加载前初始化的问题,是否更合理些。另外c#是没有这两个东西的,我们知道c#的设计是借鉴java的,那么它用什么来代替这两个功能呢,答案是静态构造函数。二者在功能上是大抵相同的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值