众所周知在JAVA编程语言中有两种初始化块:
静态初始化块
非静态初始化块
他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别
静态初始化块
定义:
static{}
执行优先级高于非静态的初始化块,它会在对象装载到系统的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。它将在类加载时被执行。
执行优先级:1
非静态初始化块
定义:
{}
执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。
执行优先级:2
实例:
1 package com.Demo; 2 public class Demo03 { 3 String name; 4 int age; 5 //构造函数初始化 优先级:3 6 public Demo03(String name,int age) { 7 this.name=name; 8 this.age=age; 9 System.out.println("构造函数"); 10 } 11 12 //非静态初始化 优先级:2 13 { 14 System.out.println("非静态初始化"); 15 } 16 //静态初始化 优先级:1 17 static{ 18 System.out.println("静态初始化"); 19 } 20 21 22 public static void main(String[] args) { 23 Demo03 demo=new Demo03("zhangs",1); 24 } 25 }
结果:
静态初始化
非静态初始化
构造函数