您的位置:首页 > 编程语言 > Java开发

Java 变量初始化时机

2016-03-31 15:07 651 查看
内容参考《疯狂Java程序员的基本修养》李刚 著

一、实例变量初始化时机

定义实例变量时指定初始值

非静态初始化块中对实例变量指定初始值

构造器中对实例变量指定初始值

代码示例:

package com.tide.controller;

/**
* Created by wengliemiao on 16/3/26.
*/
public class T2{
private int a = 1;

public T2() {
System.out.println("执行构造器");
a = 2;
}

{
System.out.println("执行非静态初始化块");
a = 3;
}

public static void main(String[] args) {
T2 t = new T2();
System.out.println("a = " + t.a);
}
}


输出结果:



注:初始化的执行顺序为:构造器最后执行,而定义时和初始化块按顺序先后执行。

验证如下:

1.1、定义时初始化在前:

package com.tide.controller;

/**
* Created by wengliemiao on 16/3/26.
*/
public class T2{
private int a = 1;

{
System.out.println("执行非静态初始化块");
a = 3;
}

public static void main(String[] args) {
T2 t = new T2();
System.out.println("a = " + t.a);
}
}


输出结果:



1.2、初始化块在前:

package com.tide.controller;

/**
* Created by wengliemiao on 16/3/26.
*/
public class T2{
{
System.out.println("执行非静态初始化块");
a = 3;
}

private int a = 1;

public static void main(String[] args) {
T2 t = new T2();
System.out.println("a = " + t.a);
}
}


输出结果:



二、类变量初始化时机

定义类变量时指定初始值

静态初始化块中对类变量指定初始值

代码示例:

package com.tide.controller;

/**
* Created by wengliemiao on 16/3/26.
*/
public class T2{
static {
System.out.println("静态初始化块");
a = 2;
}

public static int a = 1;

public static void main(String[] args) {
System.out.println("a = " + T2.a);
}
}


输出结果:



注:加载类时先为所有类变量分配内存空间,再按源代码中的定义类变量和静态初始化块的排列顺序执行初始化。

代码验证:

package com.tide.controller;

/**
* Created by wengliemiao on 16/3/26.
*/
public class T2{
public static int a = 1;

static {
System.out.println("静态初始化块");
a = 2;
}

public static void main(String[] args) {
System.out.println("a = " + T2.a);
}
}


输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: