Java的賦值與初始化__Java

來源:互聯網
上載者:User

Java的賦值和初始化包括很多容易被忽視的地方,在此分類總結如下:

1.和賦值相關:

基本類型的賦值運算需要注意的是賦值時的類型轉換問題,什麼時候可以自動轉換,什麼時候需要強制類型轉換是需要弄清楚的。

首先記住兩個約定:

  (1)所有的字面整數都是int型的。

  (2)所有的字面浮點數都是double型的,因此聲明一個float 型的浮點數,必須做類型轉換,或者聲明時加上f。float ads=3.13f。

第一條:一個佔用int或更短長度的運算式的結果總是一個int,也就是兩個byte型的結果加到一起,結果是int。舉個例子,下面的代碼是會出編譯錯誤的:

byte b=3;

byte c=8;

byte d=b+c;

b+c的結果是一個int型的值,而d是一個byte型的值,轉換時向著範圍比較小進行轉換,編譯器是會報錯的,如果顯示的強制類型轉換,則不會出問題。

從小範圍到大範圍的轉換是不需要顯示強制轉換的,包括從long型向float和double型的。

當編譯器知道過大而無法被變數儲存的字面值賦給變數,將會得到編譯錯誤。

byte a=128;

注意有幾個運算子在類型轉換的特殊地方。

   +=,-=,*=,/=這幾個運算子都將使用隱式的強制類型轉換。

byte b=3;

b+=7;//這時是正確的。

2和初始化有關:

(1)對於執行個體變數,都會初始化成預設值。對於對象參考型別的執行個體變數,其初始值是null。

(2)數組對象比較特殊,數組是一個對象,數組元素總是被賦予預設值,不論數組實在哪裡聲明和執行個體化,即使該數組是局部變數都是如此。如果數組元素是對象的引用,則預設值為null,如果數組元素是基本類型,則預設值是基本類型的預設值。

(3)局部變數是沒有預設值的,不論是基本類型,還是對象的引用,因此,任何局部變數在使用之前都必須顯式的作初始化,否則會出現編譯錯誤。

(4)對象的引用相互賦值,並不修改對象本身(String對象除外)。

(5)對於String對象,要記住這樣幾點,String對象的值是不可以改變的,因此,下面的例子看起來似乎很矛盾:
      String str="zhanglei";

      String str2=str;

      str=str+" ,how are you?";

 語句的詳細解釋如下:

      首先在堆中建立一個String對象“zhanglei”,然後讓對象引用str指向這個對象,第二條語句將對象引用str賦給str2對象引用。第三條語句將對象“zhanglei”和對象“how are you ?”做串連操作,產生一個新的對象,然後把這個對象的引用賦給str。因此,此時如果列印str2的內容還是“zhanglei”。

   (6)初始化塊:
      初始化塊分為兩種:靜態初始化塊和執行個體初始化塊;

      靜態初始化塊用來初始化類中的static屬性成員,執行個體初始化塊用來初始化執行個體屬性成員。

     第一次載入類時,會運行靜態初始化塊,沒建立一個新的執行個體,就會運行一次執行個體初始化塊。執行個體初始化塊的運行是在所有的超類建構函式運行之後。靜態初始化塊是在所有超類建構函式之前運行。多個初始化塊並存時,啟動並執行順序即他們在類檔案中出現的順序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.