初始化块与静态初始化

1、初始化块(构造代码块):
(1)作用:给对象进行初始化。对象一建立就运行,且优先于构造函数的运行。
(2)与构造函数的区别:初始化块给所有对象进行统一初始化,构造函数只给对应对象初始化。是Java在创建对象时隐示执行的,在Javac编译后初始化块内代码会被还原到构造器里,而且在最前面。先执行父类初始化块后子类的。
(3)应用:不接受参数,将所有构造函数共性的东西定义在构造代码块中。

3、Java创建对象过程的初始化顺序:先初始化块或者声明时赋值>构造器中的初始化。创建过程包括类加载、分配内存、并行处理、初始化、对象设置、执行init方法。

 


 
 
  1. public class A{
  2. { a= 9;}
  3. int a= 6;
  4. public st...main(...){
  5. print....( new A().a)
  6. }
  7. }
输出6,即创建对象时首先统一为成员们分配内存(类已加载),然后初始化块与声明后的赋值执行顺序看代码顺序

2、static静态初始化块:
(1)作用:给类进行初始化。随着类的加载而执行,且只执行一次
(2)与构造代码块的区别:
1)构造代码块用于初始化对象,每创建一个对象就会被执行一次;静态代码块用于初始化类,随着类的加载而执行,都只执行一次。
2)静态代码块优先于构造代码块的执行

4、顺序

(JVM在装载类时)先装载类的静态成员,再执行静态初始化块(同样,当一个类有继承自某类时,则会先装载该父类,那么,父类的装载或执行顺序,也都如句子所述)。

(在创建类的实例时)先执行实例初始化块,再执行构造器;但对于一棵继承树中,会先调用父类的构造方法,那么其执行顺序也如句子所述。

5、例子:
Class A{ int n = 0;}那么你创建对象 A a = new A();之后就可以使用a.n属性

Class A{  {  int a= 0;  }  } 放在块里面n就不是A的成员,就不能使用a.n属性前者把n作为对象的成员;后者只是实例化一个对象时声明一个局部变量a。有本质区别。

public class Test {
static {
System.out.println("我是静态块");
}
}
当创建Test 类的一个对象的时候,比如new Test() ,是这样,首先是类加载,然后才能new对象,静态块在类加载的时候就执行了,这就说明静态块在new对象之前就会执行,而且一个类在第一次被使用的时候 会被加载,然后在整个应用程序的生命周期当中不会再次被加载了,就加载这一次,所以这就说明,静态块就执行一次,不会执行第二遍!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值