初始化块
Posted chy18883701161
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始化块相关的知识,希望对你有一定的参考价值。
初始化块是和成员变量、成员函数一个级别的。一般用于类的初始化,也可执行其他java代码,作用和构造函数相同。
创建对象时,初始化块在构造函数之前执行。
初始化块分为普通初始化块、静态初始化块。
普通初始化块:
{
.........
}
创建对象时,在构造函数之前执行,没次创建对象时都会执行。
静态初始化块:
static{
........
}
执行优先级高于普通初始化块(在普通初始化块之前执行)。
和其它static成员一样,为类所有,只能访问static成员,但可以写其他java代码。
只在加载到内存时执行1次(只在创建第一个对象时执行),一般用于初始化类的成员(static)、类的公共资源。
一个类中可以有多个初始化块。对于多个普通的初始化块,先定义的优先级更高。
初始化块在javac编译时,原来的初始化块会消失,初始化块中的代码会被放在构造函数的函数体里的最前面。
创建对象时,会先初始化这个类的所有父类。
创建本类的第一个对象:
执行本类的初始化块,要先执行父类的初始化块,要先执行祖类的初始化块;
执行本类的构造函数,要先执行父类的构造函数,要先执行祖类的构造函数。
就是说最先调用祖类的静态初始化块,再调用父类的静态初始化块,再调用本身的静态初始化块;
再调用祖类的普通初始化块,再调用父类的普通初始化块,再调用自身的普通初始化块;
再调用祖类的构造函数,再调用父类的构造函数,再调用本身的构造函数。
示例:
1 package my_package; 2 3 public class Test { 4 5 //普通初始化块。初始化块是和成员变量、成员方法一个级别的。创建对象时,在构造函数之前执行。每次创建对象时都会执行。 6 { 7 System.out.println("普通初始化块正在执行中"); 8 } 9 10 //静态初始化块。静态初始化块执行优先级高于普通初始化块,但属于类所有,只会执行一次(只在创建第一个对象时执行) 11 static{ 12 System.out.println("静态初始化块正在执行中"); 13 } 14 15 16 17 //成员变量 18 private String str="hello"; 19 20 //构造函数 21 public Test(){ 22 System.out.println("构造函数正在执行中"); 23 } 24 25 //成员方法 26 public void out(){ 27 System.out.println("正在执行成员方法"); 28 } 29 30 public static void main(String[] args) { 31 new Test(); 32 new Test(); 33 } 34 35 36 }
以上是关于初始化块的主要内容,如果未能解决你的问题,请参考以下文章
<code> vs <pre> vs <samp> 用于内联和块代码片段