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導入指定類的靜態成員變量、方法;