java學習----底層原理一
資料型別
- java自帶8種基本型別,4中整型型別,2種浮點型別,1種用於表示Unicode編碼的字元單元的字元型別,和1種用於表示真值的bool型別(這8種基本型別都有自己的隱式初始值)。
- long在申請變數時賦值資料後必須加l或L,若不加l且在int的範圍內不會報錯,但系統預設資料型別為int而在執行時再去轉換成long會有一部分效能開銷,而且若超出int的取值範圍則會報錯。(float同理)
- 各資料型別取值範圍,正數取值比負數取值範圍少1,這是因為將0算作正數當中。int型別所用4位元組-32位,所以可以表示232次方的資料,但有一位需要表示正負,所以實際資料表示範圍為-231-------231-1。
- Int型別為連續的資料,間隔為1,float的資料為跳躍型的資料,並不連續,且其間隔不相等,所以float的資料表示範圍遠遠大於int,但也造成float資料型別精度失真(但在一般領域並不考慮這種精度丟失)。
float型別,1位符號位,7位階位,後23位為數值位,表示資料時,因小數除2永遠除不盡,所以表示小數的二進位制碼也是無窮無盡,因此計算機為了能夠表示小數,將後續二進位制碼進行了捨棄,造成了精度丟失。詳細請參考float型別轉二進位制碼。
Unicode編碼
在程式設計中,任何字元語言最終都會轉換成編碼形式,以ascii為例 ’表示為\u0027,可以嘗試執行System.out.println(\u0027s’),最終結果為s。(計算機直接識別,即便在編譯器中報錯也可以強行執行)
“=”的實質
資料型別分基本型別和引用型別,基本資料型別的變數名和資料儲存在記憶體的棧中(java虛擬機器開闢的記憶體空間中),引用型別又分類和字串,對於字串來講,若賦值時沒有用new(也就是沒有開闢空間,如String a = “123”)那麼,數值便會存在字串常量池中,棧中記錄池中對應的字串地址,如若不存在則建立此字串(若兩個String變數賦值相同,那麼指向同一個地址),而如果用了new那麼就跟類一樣,在堆中先開闢一片空間後存入資訊,將空間地址存在棧中,因此“=”對於引用型別來講便是將堆/字串常量池中的地址儲存到棧中,對於基本型別來講便是將值一起存入棧中。
static與final
static修飾符會將修飾過的變數或方法放到記憶體的靜態區(靜態區在程式執行時便已經存在,與是否建立類物件無關),在靜態區中的變數時全工程共有的,所以final通常修飾靜態變數,而final也防止內部類在使用變數之前,變數被改掉。
java編譯過程
- 語言分類
託管語言是需要安裝環境後翻譯成c與彙編的語言,如:java,vb,託管語言包括指令碼語言 PS:指令碼語言大多是作業系統自帶環境,可以直接執行的語言,也就是說指令碼語言由作業系統做決定,windows是bat檔案,linux中則是sh檔案。
非託管語言則是由作業系統直接識別翻譯成機器二進位制碼的語言(也就是說可以不用安裝環境直接用記事本寫,寫完就可以直接執行) - java編譯過程
底層語言為彙編與c語言 (c先翻譯成彙編,之後轉換成二進位制程式碼)
通過c與彙編衍生出各式各樣的語言
Eclipse首先會呼叫java.jdk將編寫好的.java檔案送到.jre翻譯成.class檔案(此class檔案並非類,檔案中的內容為位元組碼)
後將.class檔案再次翻譯成彙編與c語言,後由作業系統完成轉換機器二進位制碼,執行等工作。
相關文章
- 併發程式設計基礎底層原理學習(一)程式設計
- mysql學習筆記-底層原理詳解MySql筆記
- mybatis底層原理學習(一):SqlSessionFactory和SqlSession的建立過程MyBatisSQLSession
- 理解PHP底層原理(一)PHP
- Java I/O模型及其底層原理Java模型
- iOS底層學習 - 記憶體管理之weak原理探究iOS記憶體
- 併發程式設計基礎底層原理學習(二)程式設計
- 併發程式設計基礎底層原理學習(四)程式設計
- OC底層探索(十六) KVO底層原理
- Mybatis底層原理學習(三):查詢結果集的處理原理MyBatis
- synchronized底層原理synchronized
- php底層原理之變數(一)PHP變數
- PHP 底層原始碼學習PHP原始碼
- Java併發容器,底層原理深入分析Java
- RunLoop底層原理探究OOP
- RabbitMq底層原理分析MQ
- HashMap原理底層剖析HashMap
- HashMap的底層原理HashMap
- iOS底層原理-CategoryiOSGo
- ArrayList集合底層原理
- ConcurrentHashMap底層原理HashMap
- 前端學習(2576):選擇何種方式的路由和底層原理前端路由
- spring原始碼學習之:springAOP實現底層原理Spring原始碼
- HashMap原理(一) 概念和底層架構HashMap架構
- iOS底層原理(二):Runtime研究(一)iOS
- 反序列化底層學習
- Java進階:HashMap底層原理(通俗易懂篇)JavaHashMap
- HashMap原理詳解,包括底層原理HashMap
- AQS學習(一)自旋鎖原理介紹(為什麼AQS底層使用自旋鎖佇列?)AQS佇列
- Mybatis底層原理學習(二):從原始碼角度分析一次查詢操作過程MyBatis原始碼
- HashMap底層實現原理HashMap
- 底層原理面試彙總面試
- 初步理解 JavaScript 底層原理JavaScript
- Netty的底層原理Netty
- Spring Cloud底層原理SpringCloud
- NSDictionary底層實現原理
- Vue中的底層原理Vue
- ArrayList底層原理淺析