java基本資料類型總結
種類共有8種
byte
1byte = 8bit
-128 ~127
short
2byte = 16bit
-32768 ~ 32767
int
4byte = 32bit
-2147483648~+2147483647
long
8byte = 64bit
2的63次方 ~ 2的63次方-1
float(單精度)
double(雙精度)
布爾類型boolean
在jvm中為int,或short
true,or false
char
2byte = 16bit
表示一個unicode的字元
引用資料類型:接口,枚舉,類,數組,注解
記憶體中以二進制的形式存放資料,這個二進制以8位為一個機關,每8位構成一個位元組(byte)
(1)boolean類型
a.boolean類型的變量隻能夠取true或者false,在jvm中,會使用int或者byte表示boolean,但是這對java源程式是屏蔽的,在java源程式中,boolean類型的變量值隻能夠取true或者false;
(2)整數類型byte, short, int, long
a 都是整數類型,都是有符号的整數
b 在java語言中,如果數學表達式都是整數,則表達式的傳回值隻可能是int類型或者long類型,如果把傳回值賦給byte類型的變量,就必須進行強制類型的轉換(類型轉換的目的是截斷資料,儲存資料的後若幹位,使它滿足結果類型的需要,因為long的記憶體位數要比int多,是以儲存時不需要截斷資料就可以儲存)
c 在給整數類型變量指派時,如果該整數值在類型的取值範圍内,就可以把它直接賦給這種類型的變量,如果不在,則需要進行強制類型轉換
(3)char類型
java中使用unicode對字元進行編碼,由于計算機中隻能夠儲存二進制的資料類型,是以需要為各個字元進行編碼,常用的是ascii碼,這種編碼使用一個位元組的7位,一共能夠表示128個字元
3. 引用類型
3.1 引用類型可以分為類引用類型(引用類或者子類的執行個體),接口引用類型(引用實作接口的類的執行個體)和數組引用類型(數組是java中真正的對象)
3.2 如果一個引用變量不引用任何對象,可以給它指派為null
4. 基本類型 vs 引用類型
(1)基本類型代表簡單的資料類型,引用類型引用的執行個體能表示任意一種複雜的資料結構(引用變量字段在執行java程式時要進行常量池解析,具體就是有直接引用代替符号引用)
(2)基本類型僅表示資料類型,引用類型所引用的執行個體除了表示複雜資料結構類型外,還能夠包括操縱這種資料類型的行為
(3)對于基本類型的變量,jvm會為其配置設定資料類型實際占用的記憶體空間,對于引用類型變量,它僅僅是一個指向堆區中某個執行個體的指針。
5. new 方法
(1)當一個引用類型的變量被定義之後,如果沒有進行初始化,則它不指向任何對象,即預設值為null;
(2)使用new方法建立對象的過程
a 為對象配置設定記憶體空間,将對象的執行個體變量自動初始化為其變量類型的預設值;
b 如果執行個體變量在定義時顯示初始化,則把初始化值賦給執行個體變量;
c.調用構造方法
d.傳回對象的引用
6.變量的作用域
a. 變量的作用域指它的存在範圍,隻有在這個範圍中,程式代碼才能夠通路它;
b. 變量的作用域決定變量的生命周期,變量的生命周期指從一個變量被建立并配置設定記憶體空間開始,到這個變量被銷毀并清除它所占用的記憶體空間的過程,當一個變量被定義時,它的作用域就确定了。
c.根據作用域得不同,可以将變量分為以下幾種類型:
c.1 成員變量:在類中聲明,作用域是整個類(在哪裡聲明,作用域是哪裡)
c.2 局部變量:在一個方法内部或者在方法的代碼塊内部生命,如果在方法中聲明,則它的作用域是整個方法,如果在代碼塊中聲明,它的作用域是這個代碼塊;
c.3 方法參數:方法或者構造器的參數,它的作用域是整個方法或者構造器;
c.4 異常處理參數: 傳遞給異常處理代碼塊,即catch(exception e)語句中的異常參數e,它的作用域是緊跟catch(exception e)語句後的代碼塊
7.分析各種變量:成員變量 局部變量
7.1 成員變量有兩種,一種是被static修飾的變量,稱為類變量或者靜态變量,另一種沒有static修飾,稱為執行個體變量。
a.靜态變量在記憶體中隻有一個,隻有當某個類被程式首次主動調用時,才會對該類型進行初始化,在初始化之前首先進行加載和連接配接操作,在連接配接的準備階段給類變量配置設定記憶體,并賦予預設的初始值,在初始化階段,對靜态變量進行初始化(靜态變量有兩種初始化方式,一是在定義時直接進行初始化,二是在靜态代碼塊中進行初始化)(靜态變量僅初始化一次),類變量建立後,一直儲存在記憶體運作時資料區的方法區中,儲存在類型資訊中,被該類型的所有執行個體所共享,靜态變量可以通過類名通路,靜态變量的生命周期取決于類的生命周期,當加載類的時候,靜态變量被建立并配置設定記憶體(變量生命周期開始),當解除安裝類時,靜态變量被銷毀,并釋放所占的記憶體(這時變量的生命周期結束)
b.類的每一個執行個體都有自己的執行個體變量,是以可以有多個執行個體變量,每建立一個執行個體,jvm就建立執行個體變量并配置設定記憶體,執行個體變量的生命周期也就開始了,當銷毀對象執行個體時(記憶體被gc回收,對象的執行個體變量也就結束了它的生命周期)
c.不能夠通過類名通路類的執行個體變量,因為類的每個執行個體變量都屬于類的某個具體的執行個體,用類名通路執行個體變量不知道具體是通路那個執行個體的執行個體變量;
靜态變量的生命周期取決于類型何時被加載以及解除安裝,執行個體變量的生命周期取決于執行個體何時被建立以及銷毀
7.2 局部變量
局部變量的生命周期取決于所屬的方法何時被調用以及結束調用;
當jvm中的某個線程調用一個方法時,會為這個方法中的局部變量配置設定記憶體(在堆區的java棧中),當jvm執行結束一個方法時(或者是方法執行完畢,或者是出現某些異常),該方法的生命周期結束,方法的局部變量的生命周期也随之結束
不允許在相同的作用域中使用相同名字的變量,但是在不同的作用域中,變量的名字可以相同,比如,如果局部變量和某個執行個體變量重名,在局部方法中,局部變量會覆寫執行個體變量,如果讓執行個體變量可見,應該使用this關鍵字進行調用
8.參數傳遞
如果方法的參數是一個簡單類型,則直接傳遞參數的值,如果方法的參數是一個引用類型(類類型或者接口類型)或者數組類型,則傳入方法中的是對象的引用,也就是對象的位址(是一個值)
需要注意的一點是,調用方法的局部變量如果作為被調用方法的參數使用,它們也不是一回事,調用方法的局部變量和被調用方法的參數儲存在不同的記憶體空間中,前者儲存在調用方法的棧幀的局部變量區中,後者儲存在被調用方法的局部變量區中,它們的值可以相同,如果傳入的是引用類型的變量,參數和變量儲存相同的位址,這樣,如果在被調用方法中修改位址中的對象的資料,實際對象就會發生改變(因為這是對記憶體的永久性的操作),即使被調用的方法的生命周期結束,調用方法的局部變量所引用的對象的值還是會跟着變。
9.變量的初始化
(1)對于成員變量(無論是靜态的類變量還是執行個體變量)可以是先定義,再使用,因為jvm在為這些變量配置設定記憶體時,會首先根據類型為這些變量賦予預設值;
(2)對于局部變量,必須是先定義,再初始化,才能夠使用,因為jvm在棧幀中為局部變量配置設定記憶體空間時,并不會為局部變量賦予預設值。
10.直接數的複制
java中共有7種直接數:int long float double string char boolean
(1)基本類型不能付給引用類型,這裡string是引用類型,是以string類型和char類型之間不能夠互相指派
(2)boolean類型的直接數隻能夠賦給boolean類型的變量,同樣,boolean類型的變量值接受boolean類型的直接數
(3)把int類型的直接數賦給byte,short或者char類型的變量是,如果直接數在這些變量的取值範圍内,則可以直接指派,如果不在變量類型的取值範圍内(變量的類型說明了變量的取值範圍以及在變量上能夠進行的操作),必須進行強制類型轉換
(4)将float和double類型的直接數賦給整形變量時,必須進行強制類型轉換,而把整數型直接數賦給float和double型變量時,允許直接指派
(5)float直接數允許直接賦給double類型的變量,而
在總結一次
java中直接數的類型:int long float double char string boolean
java中變量的類型 整數類型:byte short int long
字元類型:char
boolean類型