1. 程式人生 > >JAVA 全域性變數 宣告與定義

JAVA 全域性變數 宣告與定義

JAVA全域性變數(或稱成員變數)可分兩種,一種是靜態變數,另一種是例項變數,即在類體中定義的變數,有三點得注意:
一、成員變數不能在類體中先宣告(定義)後賦值,但靜態變數可以先在類體中宣告,然後在方法中賦值(當然例項變數是不行的);

  1)如以下程式會出問題:
public class Test {

   static int a;        //在類體中宣告整型靜態變數a。

   int  b;                //在類體中宣告整型實體變數b。

  a=3;                 //在類體中對靜態變數a賦初值。

  b=5;                //在類體中對實體變數b賦初值。
public static void main(String[] args) { System.out.println("a+b="+(a+b)); } }

java中全域性變數為什麼不能先宣告再賦值?

public class Test{
    int b;
    b=5;
}

為什麼這種先聲明後賦值是錯誤?什麼機制導致的?
那是因為 i=3這是賦值語句,不能單獨出現在方法或{}以外的地方
改成

public class Test{
  int i;
  {i = 3;} //寫在{}裡就可以了(這種程式碼塊優先於構造方法執行)
}
 2)以下程式可以執行:
public class Test {

 static   int a;        //在類體中宣告整型靜態變數a。

        public static void main(String[] args) {

              a=3;                 //在方法中對靜態變數a賦值。

             System.out.println("a="+a);

             }

}
  3)以下程式也不可以執行,會報錯:
public class hello {

    int a;        //在類體中宣告整型實體變數a。
public static void main(String[] args) { a=3; //在方法中對實體變數a賦值。 System.out.println("a="+a); } }

二、成員變數可以在類體中宣告同時進行賦值,如 靜態變數:static int a=3; 例項變數:int b=5;
如:

public class Test {

   static int a=3;        //在類體中宣告整型靜態變數a並賦初值。

   int  b=5;                //在類體中宣告整型實體變數b並賦初值。

          public static void main(String[] args) {

             System.out.println("a+b="+(a+b));

             }

}

三、所有變數(包括成員變數)均不能以這種形式宣告並賦值變數(無論在類體中還是在方法

int a=b=3;  

譯系統認為 b 沒有被宣告何種資料型別。

還有,在資料型別轉換上,有隱式轉換和顯式轉換(即強制型別轉換),隱式轉換隻能從高位元組的資料型別向低位元組的資料型別轉換,這樣不會丟失原有資料的精確度,如果要將變數從低位元組的資料型別轉換成高位元組的資料型別,只能使用顯式轉換。如下:

short a=3;  
int b=65537;
a=b;

則程式會報錯。

而這樣:a=(short)b

就不會報錯了。但有時會失去資料原有的精確性。如上,則a=1; 因為a被b以低16位的位值賦值了。