码迷,mamicode.com
首页 > 其他好文 > 详细

初始化块

时间:2019-05-12 15:37:14      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:print   初始化   定义   private   第一个   pac   访问   一个   其他   

 

初始化块是和成员变量、成员函数一个级别的。一般用于类的初始化,也可执行其他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 }

 

初始化块

标签:print   初始化   定义   private   第一个   pac   访问   一个   其他   

原文地址:https://www.cnblogs.com/chy18883701161/p/10852308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!