初始化

一、类的初始化

使用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];
  • 给一部分赋值,后面的为默认初始化值0int 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变量只在自己的作用域范围{}有效

posted @ 2021-01-30 11:31  Eleanor123  阅读(343)  评论(0编辑  收藏  举报