Java中类成员变量初始化顺序

一、 定义处默认初始化vs构造函数中初始化

java中类成员变量支持在声明处初始化,也可以在构造函数中初始化,那么这两者有什么区别呢?看下面例子

 1 public class FieldsInit {
 2     public static void main(String[] args) {
 3         Test test = new Test();
 4     }
 5 }
 6 class Print
 7 {
 8     public Print(String s) {
 9         System.out.println(s);
10     }
11 }
12 class Test
13 {
14     private Print p1 = new Print("inin in declare");
15     private Print p2;
16     private Print p3 = new Print("init in declare");
17 
18     public Test() {
19         this.p2 = new Print("init in contructor");
20     }
21 }

输出结果:

inin in declare
init in declare
init in contructor

结论:说明类中普通成员变量定义处默认初始化先与在构造函数中初始化 

区别:除了初始化顺序不一样还有什么区别?对类的使用者来说,在构造函数中初始化更加灵活,可以通过构造函数参数初始化

二、静态变量vs非静态变量初始化,看下面例子

 1 public class FieldsInit {
 2     public static void main(String[] args) {
 3         Test test = new Test();
 4     }
 5 }
 6 class Print
 7 {
 8     public Print(String s) {
 9         System.out.println(s);
10     }
11 }
12 class Test
13 {
14     private Print p3 = new Print("non static var init");
15     private static Print p1 = new Print("static var init");
16 }

输出结果:

static var init
non static var init

结论:说明静态变量初始化先与非静态成员变量初始化

 

posted on 2015-10-12 19:14  yjm_yang  阅读(1427)  评论(0编辑  收藏  举报

导航