91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何初始化靜態和非靜態成員變量

發布時間:2021-06-11 16:55:08 來源:億速云 閱讀:190 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關Java中如何初始化靜態和非靜態成員變量,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

Java中非靜態成員變量、靜態成員變量的初始化時機。

非靜態變量

我們在這里分析三種結構,著重分析這三種結構的初始化順序:

  • 成員變量初始化語句;

  • 成員變量初始化塊;

  • 構造函數;

示例一:

public class MyTest {

  private String name = "wei.hu";

  public MyTest(String name) {
    System.out.println("This is constructor. Will assign the variable name to: " + name + ".");

    System.out.println("Before the name was modified: " + this.name);
    this.name = name;
    System.out.println("After the name was modified: " + this.name);
  }

  {
    System.out.println("This is initialize block. Will assign the variable name to: chouchou");

    System.out.println("Before the name was modified: " + this.name);
    this.name = "chouchou";
    System.out.println("After the name was modified: " + this.name);
  }

  public String getName() {
    return name;
  }

  public static void main(String[] args) {
    MyTest myTest = new MyTest("mengna");
    System.out.println(myTest.getName());
  }
}
#輸出
This is initialize block. Will assign the variable name to: chouchou
Before the name was modified: wei.hu
After the name was modified: chouchou
This is constructor. Will assign the variable name to: mengna.
Before the name was modified: chouchou
After the name was modified: mengna
mengna

示例二:

public class MyTest {

  public MyTest(String name) {
    System.out.println("This is constructor. Will assign the variable name to: " + name + ".");

    System.out.println("Before the name was modified: " + this.name);
    this.name = name;
    System.out.println("After the name was modified: " + this.name);
  }

  private String name = "wei.hu";

  {
    System.out.println("This is initialize block. Will assign the variable name to: chouchou");

    System.out.println("Before the name was modified: " + this.name);
    this.name = "chouchou";
    System.out.println("After the name was modified: " + this.name);
  }

  public String getName() {
    return name;
  }

  public static void main(String[] args) {
    MyTest myTest = new MyTest("mengna");
    System.out.println(myTest.getName());
  }
}

#結果(與示例一相同)
This is initialize block. Will assign the variable name to: chouchou
Before the name was modified: wei.hu
After the name was modified: chouchou
This is constructor. Will assign the variable name to: mengna.
Before the name was modified: chouchou
After the name was modified: mengna
mengna

示例三:

public class MyTest {

  public MyTest(String name) {
    System.out.println("This is constructor. Will assign the variable name to: " + name + ".");

    System.out.println("Before the name was modified: " + this.name);
    this.name = name;
    System.out.println("After the name was modified: " + this.name);
  }

  {
    System.out.println("This is initialize block. Will assign the variable name to: chouchou");

    System.out.println("Before the name was modified: " + this.name);
    this.name = "chouchou";
    System.out.println("After the name was modified: " + this.name);
  }

  private String name = "wei.hu";

  public String getName() {
    return name;
  }

  public static void main(String[] args) {
    MyTest myTest = new MyTest("mengna");
    System.out.println(myTest.getName());
  }
}


#結果
This is initialize block. Will assign the variable name to: chouchou
Before the name was modified: null
After the name was modified: chouchou
This is constructor. Will assign the variable name to: mengna.
Before the name was modified: wei.hu
After the name was modified: mengna
mengna

分析:
注意本示例的結果與上面兩個示例的結果不同。
1、當我們想將成員變量name賦值為chouchou之前,發現this.name為null。也就是說初始化語句沒有先執行,而是先執行了初始化塊;
2、當在執行構造函數時,我們想將成員變量name賦值為mengna,發現賦值之前,this.name不再是chouchou,而是wei.hu,這說明了什么?
  因為初始化塊先執行,如果緊接著執行構造函數的話,那么在構造函數賦值語句執行之前,this.name應該是chouchou才對。但是在構造函數賦值語句執行之前,this.name的值變成了wei.hu,那么足以證明:
  1)初始化塊先執行;
  2)下來執行了初始化語句;
  3)最后執行了構造函數;

結論:

通過上面三個示例,我們可以發現,對于非靜態的成員變量:

初始化語句、初始化塊,總是先于構造函數執行;

初始化語句、初始化塊的和執行順序,取決于 初始化語句、初始化塊在代碼中的書寫順序。寫在上面的先執行。

靜態變量

我們在這里也分析三種結構:

  • 靜態初始化語句;

  • 靜態初始化塊;

  • 構造函數;

示例一:

public class MyTest {

  public static String name = "wei.hu";

  public MyTest() {
    System.out.println("This is constructor. Will assign the variable name to: chouchou");

    System.out.println("Before the name was modified: " + name);
    name = "chouchou";
    System.out.println("After the name was modified: " + name);
  }

  static {
    System.out.println("This is static initialize block. Will assign the variable name to: mengna");

    System.out.println("Before the name was modified: " + name);
    name = "mengna";
    System.out.println("After the name was modified: " + name);
  }

  public static void main(String[] args) {
    System.out.println(MyTest.name);
  }
}


#結果
This is static initialize block. Will assign the variable name to: mengna
Before the name was modified: wei.hu
After the name was modified: mengna
mengna

分析:
通過打印輸出,我們發現在執行靜態初始快之前,靜態變量name已經初始化為wei.hu了。也就是說:
1、靜態初始化語句先執行;
2、下來執行靜態初始化塊;
3、構造函數未執行;
---------------------

示例二:

public class MyTest {

  public MyTest() {
    System.out.println("This is constructor. Will assign the variable name to: chouchou");

    System.out.println("Before the name was modified: " + MyTest.name);
    name = "chouchou";
    System.out.println("After the name was modified: " + MyTest.name);
  }

  static {
    System.out.println("This is static initialize block. Will assign the variable name to: mengna");

    System.out.println("Before the name was modified: " + MyTest.name);
    name = "mengna";
    System.out.println("After the name was modified: " + MyTest.name);
  }

  public static String name = "wei.hu";

  public static void main(String[] args) {
    System.out.println(MyTest.name);
  }
}


#結果
This is static initialize block. Will assign the variable name to: mengna
Before the name was modified: null
After the name was modified: mengna
wei.hu

分析:
初始化塊在對靜態變量賦值之前,發現MyTest.name的值為空。 在最后打印出MyTest.name時,發現輸出的值是wei.hu,而不是mengna。也就是說,在初始化塊執行之后,執行了靜態初始化語句。
1、先執行靜態初始化塊;
2、再執行靜態初始化語句;
3、構造函數未執行;
---------------------

結論:

對于靜態字段,初始化有如下規則:

1. 若靜態初始化語句在前,靜態代碼塊在后,則先執行靜態初始化語句;

2. 若靜態代碼塊在前,靜態初始化語句在后,則先執行靜態代碼塊;

看完上述內容,你們對Java中如何初始化靜態和非靜態成員變量有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

弋阳县| 阜新| 友谊县| 措勤县| 临潭县| 广河县| 乌兰浩特市| 东台市| 民和| 乐业县| 东至县| 景宁| 仁化县| 鄱阳县| 綦江县| 高阳县| 罗江县| 琼中| 潞城市| 闽侯县| 上饶县| 田东县| 洪江市| 嘉黎县| 绥德县| 无极县| 正蓝旗| 平陆县| 乌苏市| 墨竹工卡县| 南木林县| 贵州省| 都昌县| 大石桥市| 井陉县| 阿合奇县| 湘西| 庆元县| 油尖旺区| 江西省| 马尔康县|