Java學習3-數據類型

Java語言是強類型語言程序員

強類型包含兩個含義:數組

  1. 全部的變量必須先聲明後使用緩存

  2. 指定類型的變量只能接受類型與之匹配的值spa

  『意味着』每一個變量和表達式都有一個在編譯時就肯定的類型。類型限制了變量能被賦的值,限制了表達式能夠產生的值,限制了這些值上能夠進行的操做,並肯定了這些操做的含義。指針

  引用數據類型就是對一個對象的引用,對象包括實例和數組兩種;引用類型變量相似C++中的指針。code

  空類型(null類型)就是null值的類型,沒有名稱,因此不能聲明一個null類型的變量或者轉到null類型;null(空引用)是null類型變量惟一的值,null(空引用)能夠轉換爲任何引用類型。對象

  字符串不是基本數據類型,字符串是一個類,也就是引用數據類型。blog

  Java爲8種基本類型都提供了對應的包裝類:boolean-Boolean、byte-Byte、short-Short、int-Integer、long-Long、char-Character、float-Float、double-Double。8種包裝類經過靜態方法parseXxx(string str)用於將字符串轉換成基本類型。索引

  直接量:程序中經過源代碼直接給出的值。接口

  常量池:程序第一次使用某個字符串直接量時,Java會使用常量池(constant pool)來緩存字符串直接量,若是程序後面的部分須要用到該字符串直接量時,Java會直接使用常量池中的字符串直接量。

  常量池指的是在編譯期被肯定,並被保存在一邊以的.class文件中的一些數據,包括類、方法、接口中的常量,也包括字符串直接量。

Java數據類型

基本類型 boolean類型 boolean 8 true/false    
整數類型 byte 8 -128~127 若是直接將一個較小在byte或者short類型的表示範圍內的整數值付給一個byte或者short變量,系統自動將整數值當成byte或者short類型來處理;若是一個超過int範圍的巨大的整數值,Java不能自動將整數值當成long類型來處理,須要以L做爲後綴。
short 16 -32768~32767 Java中整數值的四種表示方式:0b/0B-二進制;0-八進制;0x/0X-十六進制。二進制表示最高位爲符號位,補碼錶示;0bxxxxxxxL表示64位二進制數,第64位爲符號位
int 32 -2147483648~2147483647 強制轉換,低位截取;
long 64 -1.84467E+19~1.84467E+19
浮點類型 float 32   1符號+8指數+23尾數  
double 64   1符號+11指數+52尾數  
字符類型   16 Unicode字符集 三種表示形式:直接經過單個字符表示,'A';經過轉義字符表示,'\n';直接經過Unicode值來表示,'uXXXX',XXXX-十六進制證書
引用類型          
接口          
數組類型          
null類型          

基本類型間的自動類型轉換  

數組

  C++中的多爲數組定義時,直接將數組線性化分配內存,數組的每一個維度上應該保持等長的;而Java中沒有嚴格的多爲數組的概念,採用「引用」類型的概念,多維數組的高維也是引用類型,因此最高維能夠不是等長的;

  例子:

  int[][] X;

  X的數組元素是int[]類型,X[0]元素只能是int類型;X不能擴展爲更高維的數組;擴展只能經過其餘方式;

數值中使用下劃線分隔

  Java7支持數值中使用下劃線,無論是什麼類型的數值,好比能夠定義int binVal=0B1000_0000_0000_0011;double PI=3.14_15_92_65_36;

直接量、直接量的賦值

  數組是一種引用類型的變量,定義一個數組只是定義了一個引用變量,並未只想任何有效的內存空間,因此尚未內存空間來存儲元素,所以這個數組也不能使用,只能對數組初始化以後才能使用。『定義數組時不能指定數組的長度』

  只要爲數組元素分配了內存空間,數組元素就具備了初試值。

  靜態初始化:初始化時由程序員顯示指定每個數組元素的初始值,有系統決定數組長度;arrayName=new type[]{element1,element2,element3,...,element4,...}

    type[] arrayName={element1,element2,element3,...,element4,...}『定義與初始化合並』
  動態初始化:初始化時程序員只指定數組長度,有系統爲數組元素分配初始值;arrayName=new type[length]
    type[] arrayName=new type[4];
  動態初始化時,系統爲這些數組元素分配初始值,指定初始值時,系統按照如下的規則分配初始值:
    1. 類型byte、short、int、long,則數組元素的值爲0;
    2. 類型float、double,則數組元素值爲0.0;
    3. 類型char,則數組元素的值爲'\u0000';
    4. 類型boolean,則數組元素的值爲false;
    5. 引用類型,則數組元素的職位null;
    『不要同時使用靜態初始化和動態初始化』

foreach循環

  遍歷數組和集合,更加簡潔。『好處』無須得到數組、集合的長度,無需根據索引訪問數組元素和集合元素,自動遍歷每個元素。

  for(TYPE variableName : array | collection){}

  『注意』使用foreach循環迭代輸出數組元素、集合元素時,並不能改變數組元素的值,所以一般不要對循環變量進行復制,容易引發錯誤。

內存中的數組

數組是一種引用數據類型,數組引用變量只是一個引用,『數組元素和數組變量在內存中是分開存放的』

  引用是訪問真實對象的根本方式,只能經過數組的引用變量來訪問數組中的元素;

理解棧內存和堆內存:

  每個方法在執行時都會創建本身的內存棧,方法內定義的變量將逐個放到這塊棧內存中,隨着方法的執行結束,該方法的內存棧也會天然銷燬,『所偶方法中定義的局部變量都是放在棧內存中的』;

  程序建立一個對象是,這個對象警備保存在『運行時數據』區中,以便反覆利用,『運行時數據區就是堆內存』;堆內存中的對象不會隨着方法的結束而銷燬,即使是方法結束後,這個對象還可能被另外一個引用變量所引用(參數傳遞常見),則這個對象依然不會被銷燬。只有當一個對象沒有任何引用變量引用它時,系統的『垃圾回收器』纔會在合適的時候回收它。

  爲了讓垃圾回收機制回收一個數組所佔的內存空間,能夠將該數組變量賦爲null。

  import語句應該出如今package語句以後,類定義以前;

  import中的*號只能表明類,不能表明包或者子包、子包中的類,所以import A.*則A中的類會導入,而A的子包中的類不會導入;

  import static導入指定類的靜態成員變量、方法;

相關文章
相關標籤/搜索