一切都是對(duì)象
2.1引用操縱對(duì)象
在Java中萬物皆對(duì)象,通常我們是使用操縱標(biāo)識(shí)符(引用)來操作對(duì)象。類似于遙控器(引用)可以控制電視機(jī)(對(duì)象)猴娩,我們可以再隨時(shí)隨地通過遙控器去控制電視機(jī)墩朦,而不用每次直接去控制電視機(jī)。
此外绊谭,即使沒有電視機(jī)政恍,遙控器也可以獨(dú)立存在,不依附于電視機(jī)(對(duì)象)达传。
2.2必須由你創(chuàng)建所有對(duì)象
一旦創(chuàng)建了引用篙耗,我們便希望引用于對(duì)象能進(jìn)行關(guān)聯(lián)。通常是使用new方法實(shí)現(xiàn)
String a = new String("abc");
2.2.1引用和對(duì)象如何存儲(chǔ)宪赶、內(nèi)存如何分配
存儲(chǔ)器名稱 | 位置 | 特點(diǎn) | 說明 |
---|---|---|---|
寄存器 | 處理器內(nèi)部 | 最快存儲(chǔ)器宗弯,用戶無法控制 | 暫存指令、數(shù)據(jù)和地址 |
堆棧 | 通用RAM(隨機(jī)訪問存儲(chǔ)器) | 速度僅次于寄存器 | 暫存對(duì)象的引用搂妻。先進(jìn)后出蒙保,存儲(chǔ)可以通過堆棧指針分配新內(nèi)存(向上移動(dòng))、釋放內(nèi)存(向下移動(dòng)) |
堆 | 通用RAM(隨機(jī)訪問存儲(chǔ)器) | 通用的內(nèi)存池欲主,靈活性高 | new代碼的時(shí)候會(huì)在堆里進(jìn)行存儲(chǔ)分配邓厕,同時(shí)會(huì)引起分配和回收比堆棧時(shí)間更長(zhǎng) |
常量存儲(chǔ)器 | 程序代碼內(nèi)部 | 永遠(yuǎn)不會(huì)改變 | 可以被放在只讀存儲(chǔ)器中 |
非RAM存儲(chǔ) | 以流的形式存在 | 可以持久化到磁盤上 |
2.2.2基本數(shù)據(jù)類型
基本類型 | 大小 | 最小值 | 最大值 | 包裝類 |
---|---|---|---|---|
Boolean | - | - | - | Boolean |
byte | 16 bit | Unicode 0 | Unicode2的16次方-1 | Byte |
char | 8 bits | -128 | 127 | Char |
short | 16 bits | - 2的15次方 | 2的15次方-1 | Short |
int | 32 bits | -2的31次方 | 2的31次方-1 | Integer |
long | 64 bits | -2的63次方 | 2的63次方-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | float |
double | 64 bits | IEEE754 | IEEE754 | Double |
高精度數(shù)字類型
- BigInteger 支持任意精度的整數(shù)逝嚎。準(zhǔn)確的表示任何大小的整數(shù)值。
- BigDecimal 支持任意精度的數(shù)字详恼,包含小數(shù)點(diǎn)补君。
2.2.3Java中的數(shù)組
Java確保數(shù)組的初始化,而且不能再他的范圍外被訪問昧互。范圍檢查會(huì)增加少量數(shù)組的內(nèi)存并且運(yùn)行時(shí)會(huì)檢查數(shù)組的下標(biāo)挽铁。
數(shù)組初始化時(shí)會(huì)創(chuàng)建引用數(shù)組,引用數(shù)組下的引用都會(huì)有一個(gè)默認(rèn)值null硅堆。當(dāng)JVM獲取到null屿储,就知道這個(gè)引用還未連接對(duì)象,在使用任何連接前渐逃,都必須為引用指定一個(gè)對(duì)象够掠。因此在使用為null值的引用時(shí)會(huì)引起程序報(bào)錯(cuò)。
2.3永遠(yuǎn)不要銷毀對(duì)象
2.3.1作用域
作用域決定了其內(nèi)部定義變量的可見性和生命周期茄菊。
2.3.2對(duì)象的作用域
Java對(duì)象不具備和基本類型一樣的生命周期疯潭,new創(chuàng)建數(shù)據(jù)作用域結(jié)束引用會(huì)結(jié)束,但是對(duì)象不隨作用域結(jié)束
{
String s = new String("abc");
}
引用s在作用域結(jié)束而結(jié)束面殖,但是s指向的String對(duì)象依然存在于內(nèi)存空間(堆)中竖哩。Java通過垃圾回收器,監(jiān)聽new創(chuàng)建對(duì)象脊僚,并辨別出不會(huì)在被引用對(duì)象相叁,隨后釋放對(duì)象的內(nèi)存空間,以供其他對(duì)象使用辽幌。
2.4創(chuàng)建新的數(shù)據(jù)類型:類
java通過class來標(biāo)識(shí)類
2.4.1字段和方法
在類中可以設(shè)置兩種類型元素:
- 字段:數(shù)據(jù)對(duì)象增淹。可以是數(shù)據(jù)類型對(duì)象乌企、基本類型
- 方法:成員函數(shù)
2.5方法虑润、參數(shù)和返回值
方法的基本組成為:名稱、參數(shù)加酵、返回值拳喻、方法體
ReturnType methodName(/*Argument List*/){
/* Method body*/
}
2.6構(gòu)建一個(gè)Java程序
2.6.1名字可見性
通過反轉(zhuǎn)域名來解決名稱沖突的問題例如:mindView.net
可以用過 net.mindview 來創(chuàng)建目錄存放該項(xiàng)目相關(guān)文件
2.6.2運(yùn)用其他構(gòu)件
通過import解決同名的類引用問題,通過import可以明確告知編譯器當(dāng)前類需要引用的類是哪一個(gè)猪腕。
2.6.3static關(guān)鍵字
為了滿足:
- 能夠滿足為特定域分配單一存儲(chǔ)空間冗澈,而不用考慮需要?jiǎng)?chuàng)建多少對(duì)象
- 獨(dú)立于類的方法,不受類的生命周期影響码撰。