Java基礎(chǔ)(10)——小結(jié)與補(bǔ)充

前面都寫了 9 篇啦,雖然斷斷續(xù)續(xù)發(fā)了半個月列荔,寫著寫著會發(fā)現(xiàn)每篇中都有些比較重要的地方?jīng)]有講到~ 這篇還是需要填一填目前我已發(fā)現(xiàn)的坑了~

一、 小結(jié)

  1. Java 編譯命令 javac贴浙、運(yùn)行命令 java
  2. java 默認(rèn)字符編碼為 Unicode
  3. Java 程序從 main 方法開始
  4. 每一個語句都需要以英文分號結(jié)束。
  5. 程序會被 {} 劃分出范圍崎溃。
  6. 類型與方法都需要定義在 {} 中
  7. 對于空格通常不影響代碼運(yùn)行
  8. Java 中的標(biāo)識符就是類名、變量名袁串、方法名、包名赎瑰。
  9. 關(guān)鍵字、保留字全部都是小寫餐曼,比如 null。
  10. 變量名可以由字母源譬、數(shù)字、下劃線瓶佳、美元符組成鳞青,但標(biāo)識符不能以數(shù)字開頭,也不能是關(guān)鍵字臂拓,區(qū)分大小寫。
  11. 變量類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型
  12. byte 的取值范圍是 - 128~127
  13. 常量定義之后胶惰,不會改變
  14. 注釋有 //、//孵滞、/ ... */
  15. 運(yùn)算符涉及到優(yōu)先級,建議加好 ()
  16. = 號是賦值泄伪,== 號是相等
  17. 選擇結(jié)構(gòu)的條件必須為布爾表達(dá)式排拷,返回值必須為 true 或者 false
  18. break 會使程序跳出循環(huán)梅掠,continue 只會跳過該次循環(huán)泽谨。
  19. System.out.print() 是輸出語句庞溜,System.out.println() 是自帶換行

二孤页、Java 的編譯運(yùn)行

寫好源代碼之后尔苦,我的學(xué)習(xí)記錄里只有寫到怎么用允坚,卻沒有去詳細(xì)解釋流程,如此就造成了一些知其然而不知其所以然的問題屋讶,so须教,這里補(bǔ)充上:

首先,需要給幾個定義:

Java 虛擬機(jī)(JVM):是可以運(yùn)行 Java 代碼的虛擬計算機(jī)轻腺。只要電腦上安裝有 Java 環(huán)境,就擁有 JVM 虛擬機(jī)贬养。

字節(jié)碼(Byte-code):是一種包含執(zhí)行程序,由一序列 op 代碼 / 數(shù)據(jù)對組成的二進(jìn)制文件仰美,是一種中間碼迷殿。(百科)

機(jī)器碼:指的是將硬件序列號經(jīng)過一系列加密庆寺、散列形成的一串序列號。(百科)

1. 編譯

寫好代碼后,保存的為 .java 文件壤圃,用 javac.exe(編譯器)編譯之后,編譯器會先檢查錯誤:

如果有錯伍绳,則編譯無法完成,需要修改墨叛,直至修改到?jīng)]錯了,才能通過漠趁。

如果沒錯,通過編譯闯传,產(chǎn)出一個字節(jié)碼文件(.class)。

so字币,編譯器:將 Java 源文件(.java)編譯成字節(jié)碼文件(.class 文件,是特殊的二進(jìn)制文件洗出,二進(jìn)制字節(jié)碼文件)

字節(jié)碼文件與平臺是無關(guān)的,這也是 JVM 的平臺無關(guān)性的來源图谷。

2. 解釋

編譯完成后,JVM 操作解釋器將產(chǎn)生的字節(jié)碼文件來解釋菠镇。

解釋器解釋字節(jié)碼的過程,就是將字節(jié)碼文件解釋成本機(jī)能夠識別的機(jī)器碼利耍。

機(jī)器碼與平臺是有關(guān)的,不同平臺的機(jī)器碼不同隘梨。

解釋由分成以下步驟:

首先,通過類加載器(class loader)將所有代碼裝入解釋器出嘹。

然后,被裝入的代碼由字節(jié)碼校驗器進(jìn)行檢查税稼,若無錯誤郎仆,則進(jìn)入下一步。

3. 執(zhí)行

Java 字節(jié)碼開始執(zhí)行扰肌,這個也有兩種方式:

a. 即時編譯方式:先將字節(jié)碼編譯成機(jī)器碼熊杨,再執(zhí)行該機(jī)器碼曙旭。

b. 解釋執(zhí)行方式:解釋器通過每次解釋并執(zhí)行一小段代碼來完成 Java 字節(jié)碼程序的所有操作桂躏。

通常情況下回采用解釋執(zhí)行方式,這樣會使字節(jié)碼翻譯成機(jī)器碼有更高的效率剂习。當(dāng)然较沪,對于對運(yùn)行速度要求較高的應(yīng)用程序,還是選擇即時編譯比較好尸曼,可以很好的保證 Java 代碼的可移植性以及高性能。

三控轿、變量的聲明與初始化

在程序運(yùn)行的過程中,內(nèi)存有一部分的空間是變化的解幽,這個空間就叫變量。那么聲明變量就是申請了一個內(nèi)存空間片部。內(nèi)存空間在開辟之時,如果沒有賦值的話档悠,內(nèi)存空間會根據(jù)變量的類型來設(shè)置默認(rèn)值。

如果有賦值的話辖所,就會將值存入內(nèi)存空間,否則就是默認(rèn)值缘回。變量的用處:存放數(shù)據(jù)。

int i;  // 聲明變量啦吧。申請了一個內(nèi)存空間,當(dāng)前為int的默認(rèn)值0
i = 1;  // 初始化變量授滓。將i賦值為1

四肆糕、引用類型

對于引用類型來說般堆,其默認(rèn)值是 null淮摔,沒有任何指向的內(nèi)存空間绍申。

那么數(shù)組也是引用類型,在聲明的時候如果沒有直接給元素的話极阅,那么其默認(rèn)值為 null。

五仆百、邏輯運(yùn)算符

關(guān)于邏輯運(yùn)算符 &&奔脐、|| 兩者俄周,有一點(diǎn)要十分注意:
這兩個存在一個短路問題峦朗,意思就是前面第一個條件已經(jīng)能夠使表達(dá)式得出結(jié)果了,后面的條件就不用判斷了波势。

比如:1>2&&2>1,那么這個因為 1>2 已經(jīng)為假了尺铣,&& 要求兩個都為真才能返回 True,所以后面的條件就不用計算凛忿,直接出返回結(jié)果。2>1 || 1>2店溢,也是一樣。

20190421 補(bǔ)充 已補(bǔ)

A. 注釋:
1. 注釋不會出現(xiàn)在字節(jié)碼文件中者疤,即 Java 編譯器編譯時會跳過注釋語句。

2. 多行注釋的小技巧:可以當(dāng)成行內(nèi)注釋使用叠赦,不會影響到后面的代碼執(zhí)行

B. 標(biāo)識符
1. 因為 Java 采用的是 Unicode 編碼革砸,Unicode 編碼中也有漢字,所以用中文是可以的册踩,但是不建議使用

附:各常用字符集之間的關(guān)系

C. 變量
1. 不建議一行定義多個變量

2. 浮點(diǎn)型變量的表示

十進(jìn)制:1.109效拭、11.09暂吉、110.9慕的、1109挤渔、110900
科學(xué)計數(shù)法:1109e-3,、1109E-2判导、1109E-1、1109眼刃、1109E2
aEb:a 乘 10 的 b 次方

3. 浮點(diǎn)數(shù)是不精確的,一定不要用于比較擂红!

float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f == d); // 結(jié)果為false
 
float d1 = 423432423f;
float d2 = d1 + 1;
if (d1 == d2) {
    System.out.println("d1==d2");// 輸出結(jié)果為d1==d2
} else {
    System.out.println("d1!=d2");
}

如果非要進(jìn)行比較的話,可以使用 java.math 包下的 BigInterger 類以及 BigDecimal 類弟头。

BigInterger 實現(xiàn)了任意精度的整數(shù)運(yùn)算、BigDecimal 實現(xiàn)了任意精度的浮點(diǎn)運(yùn)算

BigDecimal  bd2 = BigDecimal.valueOf(0.1);
BigDecimal  bd3 = BigDecimal.valueOf(1.0/10.0);
        
System.out.println(bd2.equals(bd3)); 

4. char 型變量只能用單引號疹娶,不能用雙引號÷琢可以使 (int) 變量或者 0 + 變量來轉(zhuǎn)成數(shù)字。String 是字符序列(引用類型)

5. boolean 型變量在選擇結(jié)構(gòu)中额港,直接寫:if(變量){} 即可歧焦,不推薦寫成:if(變量 ==true){}

D. 數(shù)據(jù)類型


boolean 的大小:理論上占一位向瓷,實際上單個的 boolean 類型在編譯的時候使用的是 int 類型,占 4 個字節(jié)即 32 位猖任,在數(shù)組中每一個 boolean 在 JVM 中占一個字節(jié)。轉(zhuǎn)自:https://blog.csdn.net/u010642004/article/details/50099913

E. 常量
用 final 定義

1. 常量——常量朱躺,定義后無法更改的截圖~

2. Java 中整型變量的四種表現(xiàn)形式:

二進(jìn)制整數(shù):0b01111101(要求以 0b 或 0B 開頭)
八進(jìn)制整數(shù):023(要求以 0 開頭)
十進(jìn)制整數(shù):99长搀,-100
十六進(jìn)制證書:0x15(要求以 0x 或 0X 開頭)

int  a = 0b1101;    //以0b開頭是二進(jìn)制
int  b = 0117;    //以0開頭是八進(jìn)制
int  c = 17;
int  d = 0x1f;    //以0x開頭是16進(jìn)制
        
System.out.println("二進(jìn)制:"+a);
System.out.println("八進(jìn)制:"+b);
System.out.println("十進(jìn)制:"+c);
System.out.println("十六進(jìn)制:"+d);

F. 二元運(yùn)算規(guī)則

  1. 整數(shù)運(yùn)算
  • 如果兩個數(shù)有一個為 long盈滴,結(jié)果類型為 long
  • 兩個操作數(shù)沒有 long 時轿钠,不管原來是什么類型巢钓,結(jié)果為 int 類型
  1. 浮點(diǎn)運(yùn)算
  • 如果兩個數(shù)有一個為 double症汹,結(jié)果類型為 double
  • 只有兩個數(shù)都是 float 的時候,結(jié)果才是 float
  1. 取余運(yùn)算
  • 取余的余數(shù)的正負(fù)取決于左邊的數(shù)
  1. 關(guān)系運(yùn)算
  • ==背镇、!= 是所有(基本 & 引用)數(shù)據(jù)類型都能使用
  • >咬展、>=破婆、<、<= 只有數(shù)值類型(整型和浮點(diǎn)型)以及 char 能夠使用胸囱。
    6. 字符串連接符 “+”

之前代碼中經(jīng)常出現(xiàn) “System.out.println("xx="+a);”,這樣的輸出語句烹笔,為了提示方便裳扯,所以我會在輸出變量前加上字符串饰豺,然后會有一個加號,這個加好就是字符串連接符冤吨。

在使用 “+” 運(yùn)算符連接字符串和 int 型(或 double 型)數(shù)據(jù)時饶套,“+” 將 int(或 double)型數(shù)據(jù)自動轉(zhuǎn)換成 String 類型:(遇到字符串后,往后一行全是連接,括號里的除外(誰讓括號是老大呢))

System.out.println(3+4);//  7
System.out.println(3+"4");//   3(連接)"4" = 34
System.out.println(3+4+"5");//   3(加法)4(連接)"5" = 75
System.out.println(3+4+3+"4");// 3(加法)4(加法)3(連接) "4" = 104
System.out.println(3+4+4+"3"+3);//   3(加法)4(加法)4 (連接) "3" (連接)3 = 1133

這個能看懂嘛?(????ω????)?

字符串連接符還有一個作用:當(dāng)字符串很長的時候叛复,可以用字符串連接符分成好幾行來寫:

System.out.println("我太長啦"
        + "真的,"
        + "不得不分成好幾行來寫咖耘!");

當(dāng)然撬码,+ 號叫字符串連接符,對于 char 字符型來說呜笑,它還是加法哈:(a 在編碼中為 97)

System.out.println('a');//a
System.out.println(4+'a');//4+97=101

20190422 補(bǔ)充
A. 類型轉(zhuǎn)換

  1. 自動類型轉(zhuǎn)換

容量小的數(shù)據(jù)類型可以自動轉(zhuǎn)換成容量大的數(shù)據(jù)類型(容量是說的范圍哦,轉(zhuǎn)換時會損失一定的精度)

整型常量可以直接賦值給 byte凰慈、 short驼鹅、 char 等類型變量森篷,但是要求不超出其范圍豺型。

  1. 在進(jìn)行相對變量類型來說較大數(shù)值的計算的時候,要注意自動轉(zhuǎn)換引起的數(shù)據(jù)溢出問題:
int money = 100000000; //1億
int years = 22;
//int類型大約為21億钓辆,wage為22億哼绑,超過了int的范圍
int wage = money*years;
System.out.println("wage="+wage);
//因為是兩個int值相乘,所以結(jié)果仍然為int值抖韩,在轉(zhuǎn)成long之前就已經(jīng)造成了數(shù)據(jù)溢出
long wage1 = money*years; 
System.out.println("wage="+wage1);
//先將一個數(shù)變成long,以long型與int型進(jìn)行計算茂浮,結(jié)果自動轉(zhuǎn)為long型
long wage2 = money*((long)years); 
System.out.println("wage="+wage2);

輸出結(jié)果:

所以建議大家在做運(yùn)算的時候,如果結(jié)果有溢出的可能就將第一個操作數(shù)轉(zhuǎn)型為更大的數(shù)據(jù)類型顽馋。


暫時先補(bǔ)充到這兒~ 以后發(fā)現(xiàn)沒寫到的再進(jìn)行補(bǔ)充說明幌羞。

以上,阿里嘎多属桦,20190420 from ahanwhite。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聂宾,一起剝皮案震驚了整個濱河市果善,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌系谐,老刑警劉巖巾陕,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纪他,居然都是意外死亡鄙煤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門茶袒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馆类,“玉大人,你說我怎么就攤上這事弹谁∏桑” “怎么了句喜?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沟于。 經(jīng)常有香客問我咳胃,道長,這世上最難降的妖魔是什么旷太? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任展懈,我火速辦了婚禮,結(jié)果婚禮上供璧,老公的妹妹穿的比我還像新娘存崖。我一直安慰自己来惧,他們只是感情好供搀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屿脐,像睡著了一般宪卿。 火紅的嫁衣襯著肌膚如雪愧捕。 梳的紋絲不亂的頭發(fā)上次绘,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天邮偎,我揣著相機(jī)與錄音禾进,去河邊找鬼泻云。 笑死,一個胖子當(dāng)著我的面吹牛卸夕,可吹牛的內(nèi)容都是我干的快集。 我是一名探鬼主播个初,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼院溺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瓢省?” 一聲冷哼從身側(cè)響起勤婚,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缨称,失蹤者是張志新(化名)和其女友劉穎睦尽,沒想到半個月后当凡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沿量,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年乌妒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欧宜。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡冗茸,死狀恐怖夏漱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情服赎,我是刑警寧澤践付,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布永高,位于F島的核電站命爬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗜价。R本人自食惡果不足惜炭剪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一届吁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潮模,春花似錦痴施、人聲如沸动遭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽羡玛。三九已至缝左,卻和暖如春渺杉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倚评。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呢岗,地道東北人悉尾。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像惫霸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茫打,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355