关于初始化
程序员文章站
2022-04-19 18:23:23
...
一、类的初始化
使用new关键字创建一个对象的时候,其实是调用了这个无参对象的构造方法进行的初始化,例如:
1 package day03;
2
3
4
5 class Demo01 {
6
7 public Demo01(){}
8
9 }
这个无参的构造函数可以隐藏,由JVM自动添加。因为构造函数能确保类的初始化。
二、成员初始化
Java会尽力保证每个变量在使用前都会获得初始化,初始化的分类如下:
1、编译器默认指定的字段初始化,基本数据类型的初始化
类型 |
初始值 |
Boolean |
False |
Char |
/u0000 |
Byte |
(byte)0 |
Short |
(short)0 |
Int |
0 |
Long |
0L |
Float |
0.0F |
Double |
0.0D |
2、其他对象类型的初始化,String也是一种对象,对象的初始化值都是null,也包括基本类型的包装类。
3、指定数值的初始化,例如:int a = 11,指定a的初始化值不是0而是11。
三、构造器初始化
利用构造器可以都某些方法和动作进行初始化,确定初始值,例如:
1 public class Demo02 {
2
3 int i;
4
5 public Demo02(){
6
7 i = 100;
8
9 }
10
11
12
13 public static void main(String[] args) {
14
15 Demo02 d = new Demo02();
16
17 System.out.println(d.i);
18
19 }
20
21 }
结果:
四、初始化顺序
静态属性—》静态方法块—》普通属性—》普通方法块—》构造函数—>方法
- 静态属性:static开头定义的属性
- 静态方法块:static{}包起来的代码块
- 普通属性:非static定义的属性
- 普通方法块:{}包起来的代码块
- 构造函数:类名相同的方法
- 方法:普通方法
1 package day03;
2
3
4
5 public class Demo03 {
6
7 //静态属性
8
9 private static String staticField = getStaticField();
10
11
12
13 //静态方法块
14
15 static {
16
17 System.out.println(staticField);
18
19 System.out.println("静态方法块初始化");
20
21 }
22
23
24
25 //普通属性
26
27 private String field = getFeild();
28
29
30
31 //普通方法块
32
33 {
34
35 System.out.println(field);
36
37 }
38
39
40
41 //构造函数
42
43 public Demo03() {
44
45 System.out.println("构造函数初始化");
46
47 }
48
49
50
51 public static String getStaticField() {
52
53 String staticField = "static Filed initial";
54
55 return staticField;
56
57 }
58
59
60
61 public static String getFeild() {
62
63 String filed = "Field initial";
64
65 return filed;
66
67 }
68
69
70
71 //主函数
72
73 public static void main(String[] args) {
74
75 new Demo03();
76
77 }
78
79 }
结果:
可以看到这段代码的执行顺序是:静态属性初始化—》静态方法初始化—》普通属性初始化—》普通方法初始化—》构造函数初始化
五、数值初始化
数组是相同类型的、用同一个标识符封装到一起的一个对象或基本数据序列。数据通过[]定义使用。例如:
int [] arr1;或者int arr1[];这两种格式含义是一样的。
- 直接给每个元素赋值:int array[3] = {1,2,3];
- 给一部分赋值,后面的为默认初始化值0。int array{4] = {1,3};
- 由赋值参数个数决定数组的个数:int array[] = {2,34,1};
六、对象的销毁
虽然Java语言是基于C++的,但是它和C/C++有一个重要的特征就是不需要手动管理对象的销毁工作。Java的对象销毁工作是由Java虚拟机进行管理和销毁的。
对象作用域:这个决定了其内部定义的变量名的可见性和生命周期,通常是由{}的位置决定。例如:
1 {
2
3 int a = 19;
4
5 {
6
7 int b =20;
8
9 }
10
11 }
a会在两个{}作用域有效,b变量只在自己的作用域范围{}有效