大樓的基石 資料型別 變數與常量

weixin_33860722發表於2018-06-14
11664304-5d2704e974f970c6.png
變數

java零基礎入門-核心語法篇(四) 資料型別,變數與常量

從本章開始,我們要開始最激動人心的學習啦,敲程式碼,沒有準備好的同學快去看以前的教程(老規矩 從HelloWorld開始吧),把環境搭好,老司機要開車咯~滴~滴滴~

說變數之前,我們先來看看刀...有同學肯定會問,整這些沒關係的幹啥,快上乾貨!別急別急,請聽我慢慢道來。


11664304-b814682fc1b1d3b8.png
刀具套裝

作為一個吃貨,我深深的瞭解到 做菜做料理 之間的區別,做菜就是做的能吃,好吃就夠了,僅僅為了解決飢餓的問題而存在。而料理卻有所不同,他是一種帶有匠人精神的做菜,想要做出高階的料理,工具必不可少。比如我心心念念,至今沒有吃過的河豚刺身,切出來的效果就是晶瑩剔透,薄如蟬翼,所以必須用專門的刀具去處理。還有專門切三文魚的,專門切肉的,各種刀都有自己獨特的使用場景。


11664304-6c7e51f41d7479c5.JPEG
河豚

除了做菜的刀,我們來看看下面這種工具刀。

11664304-fa779c59d34034c7.jpg
瑞士軍刀

工具刀功能強大,他可以適應我們的各種需求,如果我需要製作一個手工藝品,可能一把這樣的工具刀就搞定了,非常的方便。

其實我們的程式設計思想,和現實中很多事物都很像,他們在設計上,都有共通的地方。所以從現在開始,同學們要鍛鍊自己的思維能力,這個對你後面接受程式設計的思維大有裨益。

資料型別

1.強型別和弱型別

2.佔用空間

強型別和弱型別

JAVA就是強型別語言,一個有強迫症的患者,切三文魚必須用三文魚的刀,切河豚就必須用河豚刀,換過來用直接報錯。這就是強型別語言。弱型別語言就像工具刀,啥都可以幹,不管是切東西,還是鋸東西樣樣在行,我不關心變數型別,告訴我你要定義變數就夠了。這樣解釋各位清楚嗎?看看我們上面刀的分類,再看看資料型別的分類,是不是有點像?不同的資料用不同的資料型別來處理。(其實在最新的JAVA 10中,我們看到JAVA已經將他的強迫症改掉了,可以用弱型別了,這個有興趣可以去看看)

11664304-467c65c05130f31c.png
資料型別


佔用空間

我們小學的時候,老師就教過,1+1=2,後來慢慢的又學習了小數,比如買菜的時候,會有3.2元,4.5元的情況,但是我們從來沒有考慮過數字的型別。那麼我們寫程式碼為啥要整個資料型別出來呢。這個就跟記憶體空間有關了。記憶體是啥?不知道的趕緊去複習(想入行軟體 你必須先了解這些硬體)。因為有的資料存起來,需要大一點的空間,有的只需要很小的空間,計算機是個傻子,你不告訴它你要多大的空間,他不會存,甚至亂存。所以我們必須告訴他,這個資料,你給我用X個空間存起來!我在每個型別後面都有標註,他們佔多大的空間。

11664304-584fd91126d0e4e9.JPEG
浪費空間

啥?聽不懂?看上面這個圖,指頭大的東西給了這個大個箱子裝,不是浪費麼?記憶體也一樣,記憶體空間是有限,必須節約使用,如果所有的型別都一樣大,你還沒裝多少東西,記憶體就滿了。

肯定有同學問了,位元組是個啥玩意?記憶體的空間現在都是按照G來算,那位元組和G是個啥關係?看一下換算關係。

1 Byte = 8 Bits            翻譯=>          1 位元組 = 8

1 KB = 1024 Bytes                           1 KB = 1024 位元組    

1 MB = 1024 KB                               1 兆 = 1024 KB

1 GB = 1024 MB                               1 G = 1024 兆

我們來看看上面的整數型別,整數型別分為了4種,byte,short,int,long

整數也分了4種?為啥?我們看看他們的取值範圍就知道了

11664304-9ed79e262349eca8.png
取值範圍

我們看到每種型別可以使用的取值範圍是不一樣的,byte佔8位,所以他的取值範圍最小,long佔64位,他的取值範圍最大,空間越大裝的資料就越大,假設我們只有一種型別,我們存資料都要使用空間最大的型別,就會浪費記憶體空間。下面我們來看程式碼。

11664304-7472773ff1899750.png
超出範圍會報錯

我這裡設定的值全部是大於範圍上限,同學們可以自己照著寫一遍,然後把值改成超出取值下限,看看是不是會報錯。眼神好的同學可能發現最後一行,long d = 8999999999999999999L;為什麼後面有一個L?因為不寫L,會把這個數當成int,這樣就會報錯,超出取值範圍,加一個L,告訴他我這個是long型別,我給了64位空間了,就不會報錯了。

下面來說說各種型別的使用場景。

byte:一般用於處理IO流用的比較多,這個後面會有詳細講述。

short:其實這個在實際應用中,用的比較少,知道即可。

int:使用最多的型別,因為我們常規生活中,接觸的到的數字都不會超過它的範圍。比如我們計算一個商品的庫存量,一輛車上的人數等,這個使用int完全沒有問題。但是有些資料,我們一定要想清楚場景,因為int的上限是20億,有些資料是完全可以超過他的,如果用int型別就會產生錯誤,比如說淘寶幾年來的訂單數量,超過20億很輕鬆,再就是一個伺服器叢集的日誌數量,每天上十億都有可能,存幾個月就千億了,用int計算數量,覺對完蛋。所以我們就需要用long來計算。

long:用於計算超出常規的資料量,比如我們上面說的淘寶訂單數量,日誌數量等。


我們繼續看浮點型別

浮點型就是我們常說的小數,就是帶有小數點的數,如果不帶小數點,傻子計算機會認為是整數型別。再就是一個精度問題,精度就是可以表示小數點後多少位,double 的精度要比 float 的高,具體我們往下看。

11664304-f29adc019b1bfd14.png
浮點型

啊!!!這個取值範圍是什麼鬼,這個是科學記數法,看不懂沒關係,我們看下面的例子就知道了。


11664304-cf6c8aa8bef56955.png
浮點型別

我們如果處理2,3位小數使用float沒有問題,但是如果需要精確到5,6位甚至更多,請使用double型別。

在我們的日常工作中,大多情況是會規定保留2位小數的,比如處理與錢有關的業務,所以會有一套專門的方法來處理,這裡只需要瞭解2種浮點型別的特徵即可。


字元型別

11664304-1374e68f430dc502.png
中文unicode表 擷取

每個國家都有不同的語言和不同的符號,都可以使用unicode編碼來表示,每個符號都有對應的編碼。(瞭解即可)

char: 佔16位 空間,用單引號表示。

11664304-d6a4ea8efcc783b0.png

字元型別瞭解即可,實際運用不多。

布林型別 boolean

布林型別很簡單,只有true 和 false 兩種取值,但是他的作用是非常大的,我們後面會經常與他打交道的。

11664304-5ec5076ea23ab02f.png
布林型別

變數和常量

變數

其實我們上面已經使用了很多變數了,因為沒有變數,我一句程式碼都寫不出來...變數是非常重要的知識點,我們來看看

11664304-47a13d38314b5957.png
變數的名稱與賦值

其實我開始的時候犯了一個很大的錯誤,就是使用a,b,c來作為變數名稱,這是絕對不允許的,請使用有意義的名字。再就是駝峰命名,如果你的變數使用多個單片語成,第一個單詞第一個字母請小寫,後面每一個單詞開頭請大寫,這樣方便閱讀。我們來比較下,floatTest1floattest1 有沒有覺得駝峰命名可以很快的一眼就認出單詞,而後一種需要花時間去看,降低編碼效率。

再來體驗下  filterRegistrationBean  如果不用駝峰   filterregistrationbean  是不是感覺要瞎了,實際工作中比這長的命名比比皆是,養成好的習慣很重要。

變數值不能重複,我在變數最後面寫了 1,2,3這樣的數字,就是為了防止重複的變數名稱。

java中的關鍵字不可以用來命名變數,比如       int int = 5    int是關鍵字,只能用於標識變數型別 ,不能用來作為變數名稱。 

上面的圖就是我們宣告變數的方法,首先確定型別,然後起名字,最後通過 = 號來給變數一個值。


常量

變數是可以變的,我可以將任何型別允許的值賦值給變數。常量就是不變的,不可隨意更改的。

比如我們的系統要使用年,月,日這樣的概念,我們可以將他們定義為常量

11664304-99a6fb9228539672.png
常量不可修改

我們用 final 來修飾常量,因為我們的系統可能會很複雜,我們需要定義一些不可變的量,但是萬一不小心將常量改了,會導致嚴重的問題。比如 你發工資發13個月?每週上班8天?能忍麼?


本文出現的程式碼,請照著多敲幾遍,然後改一下上下限,精度等,體會一下取值範圍的作用,對的改錯,錯的改對,瞭解為什麼錯,為什麼對,這樣你才能進步。

學習程式碼一定要動手!一定要動手!一定要動手!不動手就是沒學,切記。

相關文章