java基礎學習之二:變數、基本資料型別及其對應的包裝型別

趙明威發表於2014-10-05

一、變數

任何的語言必須要的恐怕是變數了

Java變數的定義

在Java中變數是十分的容易上手,於C、C++語言類似,Java的變數宣告:

資料型別 變數名;//分號是必須的

變數名命名規則:包括 英文,數字, _ ,$ ,而且不能以數字開頭;

基本資料型別:

如圖:

資料型別

變數的定義舉個例子:

    int a;
    int _b;
    int $c;
    int 3a;//編譯錯誤
    int &c;//編譯錯誤

編譯錯誤是指,在程式執行前,編譯器對程式做的一些基本語法的檢查錯誤;

另外要注意的一點:

沒有初始化的區域性變數不能直接使用; 如:

    int a;
    System.out.println(a);//編譯錯誤

如果作為成員變數出現,即這個變數是屬於某個類所有,而不屬於某個方法函式所有的變數,可以不初始化,其預設的值為對應的0,或者是null;

二、基本資料型別

基本資料型別如上圖的八種

使用的時候主要注意的有以下幾點

字面量:如

    int a = 3;//3就是字面量,或者稱作直接量

1、整形型別的字面量預設為int

所以在初始化或者賦值的時候不能超過int的最大值,如果超過;則編譯錯誤,

如下面就是編譯錯誤:

      int a = 1000000000000;

所以當:數值較大的時候要使用long 型別;

long a = 1000000000000L;//加個L代表是long 型別

同時double和float也有這樣的問題;

float c = 1.222222222222222222;//編譯錯誤
double d =  1.222222222222222222;

帶小數點的字面量的資料型別為double:

float i = 1.02f;
double j = 1.02;

2、另外在做運算的時候,要注意不同型別的轉換問題

轉換如圖所示:

變數轉換

排在最右端的是大型別,也就是當把小型別的字面量賦給大型別字面量的時候,會發生型別自動向大型別轉化,但是大型別不能直接向小型別轉化,需要強制轉化如:

double i = 2;//此時的 i 為double 
int j = i;        //編譯錯誤;此時的i為double大型別 不能直接轉化為小型別;
int j = (int)i; 

但是 如果double有小數點的話,強制轉化會造成小數點的損失精度,如:

double i = 2.6;
int j = (int)i;
System.out.println(j); //結果是2,並不會四捨五入

如果強轉為小型別的資料型別的範圍較大,會出現異常.如:int i = (int)10000000000000000000000;錯誤,所以要根據資料型別的具體情況而.

3、變數的作用域

Java語言支援的變數型別有:

  • 成員變數
  • 區域性變數

其實變數的這些分類就如下圖一樣明瞭,

  • class 中定義的變數 而不屬於其他任何方法的變數,叫做成員變數.
  • 屬於某個方法的變數叫做區域性變數

變數

4、 變數作用域和生命週期

  • 作用域:

    成員變數的作用域比較大,站得高看得遠,這個類的所有的方法都能夠"看到它",都能去用它 區域性變數作用域:只在它所在的方法中被使用,其他方法"看不到"這個變數,但是也可以與成員變數同名,但是這個時候成員變數的呼叫就不能直接呼叫了要用到this,this說明是這個類的東西.

  • 生命週期:

    明顯的:

成員變數的生命週期和整個類的生命週期是一致的,就是這個類 活到什麼時候,這個成員變數就活到什麼時候.

區域性變數的生命週期和它所在方法的生命週期一致,呼叫這個方法結束後,這個區域性變數就被銷燬了.

練一練:

這就像"男人(女人)和 人 分不開,人 和 運動 分不開"一樣 ,資料型別 和 變數 是分不開的,變數 和 運算子 也是分不開的.像人天生為分為男女一樣,一個變數在宣告的時候也要先說明資料型別.

//類的宣告一定要大寫,而且要與檔案同名
 public class MyProgram {
    char x = 0;
    public void main(String[] args) {
        //java的輸出函式   System.out.println()
        //資料型別 和 變數 是分不開的,變數 和 運算子 也是分不開的
        //這就像"男人(女人)和 人 分不開,人 和 運動 分不開"
        //像人天生為分為男女一樣,一個變數在宣告的時候也要先說明資料型別
        int a, b, c;         // 宣告三個int型整數:a、 b、c。
        int d = 3, e, f = 5; // d宣告三個整數並賦予初值。
        byte z = 22;         // 宣告並初始化z。
        double pi = 3.14159; // 宣告瞭pi。
        char x = 'x';        // 變數x的值是字元'x'。 可以與成員變數重名,
        x = this.x;          //用this可以呼叫到成員變數
        System.out.println(x); //輸出將是0;
    }
}

三、基本資料型別對應的包裝型別

基本資料型別:byte,int,short, long,boolean,char,float,double

包裝型別: Byte,Integer,Short,Long,Boolean,Character,Float,Double

包裝資料型別不僅僅看上去是把首字母大寫了,而且還有了一個本質的變化,那就是搖身一變,變成了引用型別

隨著JDK的升級,包裝類有了自動拆包(包裝型別變成對應的基本型別),裝包(基本型別變成對應的包裝型別): 例如:

Integer i = new Integer(1);//初始化
System.out.println(i.getClass());//class java.lang.Integer
int j = 0;
i = Integer.valueOf(j);//這就是所謂的裝包但是可以直接寫成, i = j;
int a = i.intValue();    //這就是所謂的拆包,也可以直接寫作,int a = i
System.out.println(i);//此處進行了自動拆包

String與基本資料型別的轉化,可以參考第六節,

四、運算子

在發例子之前先了解一下運算子和優先順序,其實裡面大部分大家都認識了;

運算子

特別注意的是++--,++-- 在變數前,先做自增或自減操作,再用,在變數後面的話,先用變數,然後做自增或自減操作 例如:

int B = 20;
int x = ++B;
int y = B++;
//結果
x = 21;y=21;

但B最終都是發生變化的,B = 22;

關係運算子: 關係運算子

Java運算子優先順序

當多個運算子出現在一個表示式中,誰先誰後呢?這就涉及到運算子的優先順序別的問題。在一個多運算子的表示式中,運算子優先順序不同會導致最後得出的結果差別甚大。

例如,(1+3)+(3+2)*2,這個表示式如果按加號最優先計算,答案就是 18,如果按照乘號最優先,答案則是 14。

再如,x = 7 + 3 * 2;這裡x得到13,而不是20,因為乘法運算子比加法運算子有較高的優先順序,所以先計算3 * 2得到6,然後再加7。

下表中具有最高優先順序的運算子在的表的最上面,最低優先順序的在表的底部。

優先順序

相關文章