变量的初始化及默认值

关于初始化
--------------------------------------------------------------------------------------------------------------------------------
1 成员变量初始化

1.1 自动初始化

boolean -----初始值----> false
char -----初始值----> (char)0
byte -----初始值----> 0
short -----初始值----> 0
int -----初始值----> 0
long -----初始值----> 0
float -----初始值----> 0.0
double -----初始值----> 0.0
对象 -----初始值----> null
数组内部元素的初始值按上面的要求初始化.

1.2 指定初始化

指定初始化就是在变量后跟一个值.如:int i = 12;

1.3 构造器初始化.

构造器初始化就是在构造器中为成员变量赋值.
如:
class A{
int i;
A(int n){
this.i = n;
}
}

2 局部变量初始化

局部变量不能自动初始化,不能构造器初始化,一定要直接初始化.否则是不可用的.

--------------------------------------------------------------------------------------------------------------------------------

成员变量的初始化: 自动初始化先于直接初始化, 直接初始化先于构造器初始化.

--------------------------------------------------------------------------------------------------------------------------------

成员变量初始化顺序:

在类的内部,变量定义的先后顺序决定了初始化的顺序.即使变量定义散布于方法定义之间,它们仍然会在任何
方法(包括构造器)被调用之前得到初始化.

--------------------------------------------------------------------------------------------------------------------------------

静态成员变量初始化:

静态成员变量初始化与非静态成员变量初始化是一样的.
只是静态成员变量只初始化一次.而且静态成员变量的初始化先于非静态成员变量.
静态成员变量的初始化前提是: 创建该类的对象时或引用该类的静态变量时或调用该类的静态方法时.

--------------------------------------------------------------------------------------------------------------------------------

测试代码
1.package test;
2.
3./**
4. * 关于成员变量初始化
5. *
6. * @author fhd001
7. */
8.public class ValueTest {
9.
10. int n = 2; // 指定初始化
11. boolean flag; // 自动初始化
12. static int n1;
13. static boolean flag2;
14.
15. static{
16. //静态初始化先于非静态初始化.
17. System.out.println("静态初始化: "+n1);
18. flag2 = true;
19. System.out.println("静态初始化: "+flag2);
20. }
21.
22. public ValueTest() {
23. }
24.
25. public ValueTest(int k, boolean f) {
26. // 指定初始化先于构造器初始化
27. System.out.println(n);
28. // 自动初始化先于构造器初始化.
29. System.out.println(flag);
30. this.n = k;
31. this.flag = f;
32. System.out.println(n);
33. System.out.println(flag);
34. // 自动初始化先于指定初始化,无法测试.略.
35. }
36.
37. public static void main(String[] args) {
38.
39. ValueTest t = new ValueTest(38, true);
40. }
41.}
package test;

/**
* 关于成员变量初始化
*
* @author fhd001
*/
public class ValueTest {

int n = 2; // 指定初始化
boolean flag; // 自动初始化
static int n1;
static boolean flag2;

static{
//静态初始化先于非静态初始化.
System.out.println("静态初始化: "+n1);
flag2 = true;
System.out.println("静态初始化: "+flag2);
}

public ValueTest() {
}

public ValueTest(int k, boolean f) {
// 指定初始化先于构造器初始化
System.out.println(n);
// 自动初始化先于构造器初始化.
System.out.println(flag);
this.n = k;
this.flag = f;
System.out.println(n);
System.out.println(flag);
// 自动初始化先于指定初始化,无法测试.略.
}

public static void main(String[] args) {

ValueTest t = new ValueTest(38, true);
}
}


结果代码
1.静态初始化: 0
2.静态初始化: true
3.2
4.false
5.38
6.true
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页