java 成员变量的初始化_Java类变量和成员变量初始化过程
一、類的初始化
對(duì)于類的初始化:類的初始化一般只初始化一次,類的初始化主要是初始化靜態(tài)成員變量。
類的編譯決定了類的初始化過程。
編譯器生成的class文件主要對(duì)定義在源文件中的類進(jìn)行了如下的更改:
1)?????? 先按照靜態(tài)成員變量的定義順序在類內(nèi)部聲明成員變量。
2)?????? 再按照原java類中對(duì)成員變量的初始化順序進(jìn)行初始化。
一個(gè)java類和編譯后的class對(duì)應(yīng)的轉(zhuǎn)換如下:
源文件:
public class Person{
public static String name="張三";
public static int age;
static{
age=20;
System.out.println("初始化age");
}
public static String address;
static{
address="北京市";
age=34;
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(age);
System.out.println(address);
}
}
當(dāng)java源代碼轉(zhuǎn)換成一個(gè)class文件后,其轉(zhuǎn)換成類似下面的代碼:
public class Person{
public static String name;
public static int age;
public static String address;
static{
name="張三";
age=20;
System.out.println("初始化age");
address="北京市";
age=34;
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(age);
System.out.println(address);
}
}
初始化順序依據(jù)轉(zhuǎn)換后對(duì)應(yīng)的class類成員變量的初始化順序依次執(zhí)行,所以所有的靜態(tài)成員變量都是先聲明,后執(zhí)行賦值的,而且賦值的順序也是依照源代碼對(duì)靜態(tài)成員變量初始化的順序進(jìn)行的,注意:定義一個(gè)成員變量并直接初始化與在靜態(tài)代碼塊中進(jìn)行初始化是等價(jià)的,都是依據(jù)它們?cè)谠创a中定義的順序進(jìn)行的。
二、對(duì)象的生成
對(duì)于對(duì)象的生成其初始化過程與類的初始化過程類似,但會(huì)增加構(gòu)造函數(shù)階段,源代碼如下:
1 public class Person{
2 {
3 name="李四";
4 age=56;
5 System.out.println("初始化age");
6 address="上海";
7 }
8 public String name="張三";
9 public int age=29;
10 public String address="北京市";
11 public Person(){
12 name="趙六";
13 age=23;
14 address="上海市";
15 }
16 }
編譯器轉(zhuǎn)換成class文件后,會(huì)轉(zhuǎn)換成類似下面的代碼:
1 public class Person{
2 public String name;
3 public int age;
4 public String address;
5 public Person(){
6 name="李四";
7 age=56;
8 System.out.println("初始化age");
9 address="上海";
10 name="張三";
11 age=29;
12 address="北京市";
13 name="趙六";
14 age=23;
15 address="上海市";
16 }
17 }
可以看到,對(duì)于類中對(duì)成員變量的初始化和代碼塊中的代碼全部都挪到了構(gòu)造函數(shù)中,并且是按照java源文件的初始化順序依次對(duì)成員變量進(jìn)行初始化的,而原構(gòu)造函數(shù)中的代碼則移到了構(gòu)造函數(shù)的最后執(zhí)行。本人以前一直對(duì)類初始化過程一直沒有一個(gè)深刻的理解,就是搞不清到底是怎么初始化的,只能按照書上所說的記住了初始化順序,但是過一段時(shí)間有給忘了,所以這次總算給弄清楚了,還是按照一個(gè)模型來解釋初始化機(jī)制比較好啊,不用再背了,只有理解了才能不易忘
總結(jié)
以上是生活随笔為你收集整理的java 成员变量的初始化_Java类变量和成员变量初始化过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java正则转义_Java 正则表达式
- 下一篇: 逻辑java练习_逻辑结构常见练习 Ja