Java課堂筆記(一):Java基礎


        本篇博客將對Java中的數據類型、操作符,常量與變量和數組進行介紹。這些內容都是Java中最基本的知識,也是初學Java時最開始就需要了解的東西。

Java數據類型

        Java是一種強類型的語言,這就意味着編寫Java代碼時必須為每一個變量都聲明一個類型,且每個變量只能被賦予與其類型匹配的值。Java中的數據類型可以分為基礎數據類型和引用數據類型,兩者間最大的差別是在計算機中的存儲方式和位置不同。基礎數據類型在創建時會在棧中分配一塊內存,將數據直接存儲在其中;而引用數據類型在被創建時,會在堆內存上分配一塊內存,將數據內容存儲在其中,並在棧中分配一塊內存用於存儲該數據在堆中的地址。

        Java中包含8中基本數據類型,包括4中整數類型:short、int、long、byte,2中浮點類型:float、double,1種用於表示Unicode編碼的字符單元的字符類型char和1種用於表示真假值的boolean類型。它們相關信息如圖1所示

圖1:各基本數據類型信息

        在Java的8中基本數據類型中,出除了boolean不能與其他類型相互轉換外,其他類型間可以相互轉換。這幾種數值類型之間的轉換關系滿足如圖2的條件。其中當數據沿着箭頭的方向進行轉換時,不需要額外進行處理(如int轉換為long),而逆着箭頭進行轉換時則需要進行強制類型轉換,且有可能會損失數據精度(如將float轉換為int)。這里需要注意的是,這里大部分箭頭都是從存儲長度短的數據類型指向存儲長度長的數據類型,這很容易理解。但是long的長度是64位,float的長度是32位,但是箭頭確實從long指向float。這是因為float雖然占用字節數比較少,但是由於其采用的是尾數+指數的方式來表示的,因此反而比long數據類型的范圍更大(查看圖1也可以發現),因此數據從long轉向float不會損失精度。

 圖2:各數據類型間的轉換

        基本數據類型的聲明不需要多說,在初始化數據時,整型數據默認為int類型,浮點型數據默認為double類型。如果要定義long類型數據需要在數據后加L,否則會編譯錯誤;同理定義float數據時需要加F。如圖3所示:

圖3:long和float數據類型的定義與賦值

運算符

        Java中的運算符包括算術運算符,位運算符,賦值運算符,比較運算符,邏輯運算符和三目運算符。

        算數運算符包括+、-、*、/、%、++(自加)、--(自減)。其中,++和--操作屬於一目運算符,它們只能對一個操作書進行運算,且可以放在操作數的前面和后面。兩者差別在於當自加(自減)放在操作數前面的時候,先對操作數進行加一(減一)操作,然后進行表達式的運算;放在操作數后面時,先進行表達式運算,然后對操作數進行加一(減一)操作。

        位運算符對整型數的二進制的每一位進行操作,包括以下七種:

& 按位與,左右都為1時返回1,其余為0
| 按位或,左右都為0時返回0,其余為1
~ 非,0結果為1,1的結果為0
^ 異或,左右相同時為0,不同時為1
<< 左移運算
>> 右移運算
>>> 無符號右移運算

 

        賦值運算符的作用是給變量賦值,Java中使用=進行賦值操作。其次,賦值操作符還可以和算出操作符和位運算符一起使用。例如 “+=”操作, x += 3 等同於 x = x + 3。擴展運算符和原表達式的結果是一樣的,但是能夠避免運算時類型轉換的錯誤,如圖4所示:

圖4:圖片來自《瘋狂Java講義》

       比較運算符只返回true和false,表示比較式成立和不成立,包括==、>、>=、<、<=五種。

       邏輯運算符對布爾類型的變量進行運算,返回結果也為布爾類型。包括以下幾種:

&& 短路與,左右均為true時結果為true,否則為false。當左側為false時,不判斷右側結果
& 不短路與,作用於&&相同,但不進行短路
|| 短路或,左右均為false時為false,否則為true。當左側為true時,不判斷右側結果
| 不短路或,作用於||相同,但不進行短路
非,操作數為true返回false,操作數為false返回true
^ 異或,兩側操作數相同為false,不同為true

        三目運算符是“?:”,先計算一個邏輯表達式的值,根據值得不同返回不同的值。c = a > b ? 0 : 1表示,當a > b是c為0,否則為0。

變量與常量

        變量指程序運行中可以改變的值,常量值程序運行中不能改變的值。Java中定義常量使用final進行修飾,final除了可以修飾常量以外,還可以用於修飾方法和類。

        使用final修飾一個引用變量時,改變量所指向的對象不可以被改變,但是變量內部的其他變量可以修改;

        使用final修飾一個方法時,該方法不可以被覆蓋;

        使用final修飾一個類時,該類不可以被繼承。

數組

        Java數組的定義方式如下:

        type[] arrName = new type[size];

        type arrName[] = new type[size];

        兩種定義方式沒有差別,type表示數組中元素的類型,可以是基本類型或引用類型,arrName是數組的名字,new type[size]為數組分配了長度為size的空間長度,元素的默認值與定義的type的默認值相同。

        Java數組的初始化有兩種方式:

public void arrayTest() {
        //靜態初始化,定義數組時就分配空間並賦值
        int[] arr1 = {1,2,3};

        //動態初始化
        int[] arr2 = new int[3];
        arr2[0] = 1;
        arr2[1] = 2;
        arr2[2] = 3;
}

         二維數組的定義與一維數組類似,且並不要求每一維的大小相同

    public void arrayTest() {
        int[][] arr1 = {{1,2},{3,4},{5,6,7}};
        
        int[][] arr2 = new int[3][3];
        arr2[0][0] = 1;
        arr2[1][2] = 2;
        arr2[2][2] = 3;

    }

         Java中有Arrays類,其中加入了一些對數組常用的操作,例如Arrays.sort(), Arrays.toString()等

Arrays.sort(arr1);//數組排序
System.out.println(Arrays.toString(arr1));//一維數組輸出
System.out.println(Arrays.deepToString(arr2));//多維數組輸出

 

參考文獻

[1].瘋狂Java講義(第三版)

[2].Java編程思想 第四版


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM