成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java中如何初始化靜態(tài)和非靜態(tài)成員變量

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

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:做網站、網站設計、企業(yè)官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯(lián)網時代的花都網站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

Java中非靜態(tài)成員變量、靜態(tài)成員變量的初始化時機。

非靜態(tài)變量

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

  • 成員變量初始化語句;

  • 成員變量初始化塊;

  • 構造函數(shù);

示例一:

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之前,發(fā)現(xiàn)this.name為null。也就是說初始化語句沒有先執(zhí)行,而是先執(zhí)行了初始化塊;
2、當在執(zhí)行構造函數(shù)時,我們想將成員變量name賦值為mengna,發(fā)現(xiàn)賦值之前,this.name不再是chouchou,而是wei.hu,這說明了什么?
  因為初始化塊先執(zhí)行,如果緊接著執(zhí)行構造函數(shù)的話,那么在構造函數(shù)賦值語句執(zhí)行之前,this.name應該是chouchou才對。但是在構造函數(shù)賦值語句執(zhí)行之前,this.name的值變成了wei.hu,那么足以證明:
  1)初始化塊先執(zhí)行;
  2)下來執(zhí)行了初始化語句;
  3)最后執(zhí)行了構造函數(shù);

結論:

通過上面三個示例,我們可以發(fā)現(xiàn),對于非靜態(tài)的成員變量:

初始化語句、初始化塊,總是先于構造函數(shù)執(zhí)行;

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

靜態(tài)變量

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

  • 靜態(tài)初始化語句;

  • 靜態(tài)初始化塊;

  • 構造函數(shù);

示例一:

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

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

示例二:

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

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

結論:

對于靜態(tài)字段,初始化有如下規(guī)則:

1. 若靜態(tài)初始化語句在前,靜態(tài)代碼塊在后,則先執(zhí)行靜態(tài)初始化語句;

2. 若靜態(tài)代碼塊在前,靜態(tài)初始化語句在后,則先執(zhí)行靜態(tài)代碼塊;

看完上述內容,你們對Java中如何初始化靜態(tài)和非靜態(tài)成員變量有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

當前題目:Java中如何初始化靜態(tài)和非靜態(tài)成員變量
網站URL:http://jinyejixie.com/article0/gggdoo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供手機網站建設、網站收錄標簽優(yōu)化、軟件開發(fā)、全網營銷推廣、商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站制作
依兰县| 同心县| 腾冲县| 怀集县| 体育| 大连市| 衢州市| 闵行区| 崇义县| 平度市| 沾化县| 大连市| 黄平县| 六枝特区| 鲁甸县| 开平市| 平谷区| 庆阳市| 崇左市| 建昌县| 南岸区| 白朗县| 黑山县| 诸城市| 雷山县| 鹤岗市| 宁波市| 邵阳县| 子洲县| 寿阳县| 醴陵市| 呈贡县| 秦皇岛市| 青浦区| 海门市| 余姚市| 泰和县| 高安市| 原阳县| 法库县| 酉阳|