溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java對象、操作符、控制執(zhí)行流程分析

發(fā)布時(shí)間:2021-11-24 14:34:08 來源:億速云 閱讀:145 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“Java對象、操作符、控制執(zhí)行流程分析”,在日常操作中,相信很多人在Java對象、操作符、控制執(zhí)行流程分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java對象、操作符、控制執(zhí)行流程分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

1.五個(gè)不同的地方可以存儲數(shù)據(jù)

(1)寄存器:這是最快的存儲區(qū),它位于處理器內(nèi)部,其數(shù)量及其有限,根據(jù)需求進(jìn)行分配,你不能直接控制,也無法感知其存在(但C和C++運(yùn)行向編譯器建議寄存器的分配方式)。

(2)堆棧:位于通用RAM(隨機(jī)訪問存儲器)中,但通過堆棧指針可以從處理器那里獲得直接支持。堆棧指針向下移動,則分配新的內(nèi)存,若向上移動,則釋放內(nèi)存。這是一種快速有效的分配存儲方法,僅次于寄存器。Java系統(tǒng)必須知道存儲在堆棧內(nèi)所有項(xiàng)的生命周期(限制了靈活性),以便上下移動堆棧指針,Java對象的引用便存儲于堆棧中。

(3):是一種內(nèi)存池(也位于RAM區(qū)),用于存放所有的Java對象,編譯器不需要知道存儲的數(shù)據(jù)在堆里的存活時(shí)間(體現(xiàn)了靈活性),new一個(gè)對象時(shí),會自動在堆里進(jìn)行存儲分配,用堆進(jìn)行存儲分配和清理會比用堆棧花更多時(shí)間

(4)常量存儲:常量值通常直接存放在程序代碼內(nèi)部,這樣做是安全的,因?yàn)樗鼈冇肋h(yuǎn)不會被改變。

(5)非RAM存儲:如果數(shù)據(jù)完全存活于程序之外,那么它可以不受程序的任何控制,在程序沒有運(yùn)行時(shí)也可以存在。如流對象和持久化對象,在流對象中,對象轉(zhuǎn)化成字節(jié)流,在持久化對象中,對象被存放于磁盤上,程序終止后,它們?nèi)钥梢员3肿约旱臓顟B(tài)。

2.對于一些基本類型,特別是小的、簡單的變量,Java采用和C、C++相同的方法,不用new來創(chuàng)建變量,而是創(chuàng)建一個(gè)并非是引用的“自動”變量,這個(gè)變量直接存儲“值”,并置于堆棧中,因此更加高效。但這些基本類型通常也具有相應(yīng)的包裝器類,并可以反向轉(zhuǎn)換(將包裝器類的數(shù)據(jù)轉(zhuǎn)為簡單變量存儲)。

3.高精度計(jì)算類BigInteger支持任意精度的整數(shù),BigDecimal支持任意精度的定點(diǎn)數(shù)。它們以犧牲運(yùn)算速度為代價(jià),換取了精度。

4.Java對象不具備和基本類型一樣的聲明周期,當(dāng)用new創(chuàng)建一個(gè)Java對象時(shí),它可以存活于作用域之外:

{
   
   
   String s = new String("a string");}

引用s在作用域終點(diǎn)就消失了,然而s指向的String對象實(shí)體卻仍繼續(xù)占據(jù)內(nèi)存空間,但我們無法在這個(gè)作用域之后訪問這個(gè)對象,因?yàn)閷λㄒ坏囊靡呀?jīng)超出了作用域的范圍。當(dāng)Java的垃圾回收器監(jiān)測到這些不會再被引用的對象時(shí),就會釋放這些對象的內(nèi)存空間,以便供其他新的對象使用。

5.調(diào)用方法的行為通常被稱為:發(fā)送消息給對象。

int x = a.f();

消息是f(),對象是a。

6.Java中為什么沒有sizeof()?
在C和C++中,需要使用sizeof()的最大原因是為了“移植”,不同數(shù)據(jù)類型在不同機(jī)器上可能有不同的大小;Java由于建設(shè)于JRE之上,所有在所有機(jī)器上數(shù)據(jù)類型的大小都相同,無需用sizeof()。

7.移位操作符:

(1)左移位操作符(<<):按照操作符右側(cè)指定的位數(shù)將操作符左邊的操作數(shù)向左移動(在低位補(bǔ)0)—[高位舍棄,低位補(bǔ)0]

(2)“有符號”右移操作符(>>):按照操作符右側(cè)指定的位數(shù)將操作符左邊的操作數(shù)向右移動(符號為正:在高位插入0; 為負(fù):在高位插入1)

(3)“無符號”右移操作符(>>>):…在高位插入0

注:
移位+等號,指定移動的位數(shù),例如:k >>>= 10
5 << 2:00000101 —> 00010100 由5變?yōu)?0
>>:擴(kuò)大2^k
<<:縮小2^k

到此,關(guān)于“Java對象、操作符、控制執(zhí)行流程分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI