1.1. 關(guān)鍵字
什么是關(guān)鍵字
定義:被Java語言賦予了特殊含義的單詞。
特點:關(guān)鍵字中所有字母都為小寫。
小實驗:
使用Editplus編輯器寫一個Hello World輸出程序。

編輯器中藍色字體就是關(guān)鍵字,紅色字體就是JDK自己為我們所提供的類。
注意:
1、所有的關(guān)鍵字都不需要記憶,在后期的學習中慢慢就掌握了。
2、EditPlus默認會創(chuàng)建一個bak備份文件,如果不想創(chuàng)建備份文件,只需要通過如下操作:
點擊Tools-->Preferences-->File-->勾掉Create backup file when saving。
1.2. 標識符
定義:在程序中自定義的一些名稱。 自己的名字
特點:由26個英文字母大小寫,數(shù)字:0-9,符號:_ $ 組成。
定義合法標識符規(guī)則:
1、數(shù)字不可以開頭。
2、不可以使用關(guān)鍵字。
注意:
1、Java中嚴格區(qū)分大小寫。
2、在起名字的時,為了提高閱讀性,要盡量有意義。
3、公司中經(jīng)常會通過“_”代表某一類名稱,例如:_temp。
通過“$”代表外部類與內(nèi)部類的關(guān)系(后面會講到),例如:TrafficLamp$Red。
Java中的名稱規(guī)范:
包名:多單詞組成時所有字母都小寫。
例如:xxxyyyzzz com.doitedu.hangge
類名接口名:多單詞組成時,所有單詞的首字母大寫。
例如:XxxYyyZzz class XuRuiHang {}
變量名和函數(shù)名:多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每個單詞首字母大寫。
例如:xxxYyyZzz xuRuiHang()
常量名:所有字母都大寫。多單詞時每個單詞用下劃線連接。
例如:XXX_YYY_ZZZ XU_RUI_HANG = 3;
1.3. 注釋
定義:用于注解說明解釋程序的文字就是注釋。
特點:提高了代碼的閱讀性。
Java中的注釋格式:
單行注釋
格式: //注釋文字
多行注釋
格式: /* 注釋文字 */
文檔注釋
格式:/** 注釋文字 */
例如:
/**
* 這是我的Hello World程序。
*
* @author 多易教育
*/
class Demo {
/*
* 這是主函數(shù),是程序的入口 它的出現(xiàn)可以保證程序的獨立運行,
*/
public static void main(String[] args) {
// 這是輸出語句用于將括號內(nèi)的數(shù)據(jù)打印到控制臺。
System.out.println("Hello World");
}
}
注意:
1、對于單行和多行注釋,被注釋的文字,不會被JVM(java虛擬機)解釋執(zhí)行。
2、對于文檔注釋,是java特有的注釋,其中注釋內(nèi)容可以被JDK提供的工具 javadoc 所解析,生成一套以網(wǎng)頁文件形式體現(xiàn)的該程序的說明文檔。
3、注釋是一個程序員必須要具有的良好編程習慣。初學者編寫程序可以養(yǎng)成習慣:先寫注釋再寫代碼。
4、將自己的思想通過注釋先整理出來,在用代碼去體現(xiàn)。因為代碼僅僅是思想的一種體現(xiàn)形式而已。
5、單行注釋可以嵌套單行注釋,單行注釋可以嵌套多行注釋,多行注釋可以嵌套單行注釋。
但是,多行注釋不能嵌套多行注釋,因為多行注釋的開頭會和被嵌套的多行注釋的結(jié)尾配對,導致后面的注釋失效。
6、可以使用注釋對代碼中的錯誤進行定位。
1.4. 常量
定義:常量表示不能改變的數(shù)值。
Java中常量的分類:
1、整數(shù)常量,所有整數(shù)。
2、小數(shù)常量,所有小數(shù)。
3、布爾(boolean)型常量,只有兩個數(shù)值。true、false。
4、字符常量,將一個數(shù)字字母或者符號用單引號( ' ' )標識。
5、字符串常量,將一個或者多個字符用雙引號("")標識。
6、null常量,只有一個數(shù)值就是:null。
對于整數(shù),有三種表現(xiàn)形式:
八進制:0-7,滿8進1,用0開頭表示。
十進制:0-9,滿10進1。
十六進制:0-9,A-F,滿16進1,用0x開頭表示。
進制的由來:
任何數(shù)據(jù)在計算機中都是以二進制的形式存在的。二進制早期由電信號開關(guān)演變而來。
一個整數(shù)在內(nèi)存中一樣也是二進制的,但是使用一大串的1或者0組成的數(shù)值進行使用很麻煩。
所以就想把一大串縮短點,將二進制中的三位用一位表示。這三位可以取到的最大值就是7,超過7就進位了,這就是八進制。
但是對于過長的二進制變成八進制還是較長,所以出現(xiàn)的用4個二進制位表示一位的情況,四個二進制位最大是15,這就是十六進制。
規(guī)律:進制越大,表現(xiàn)形式越短。
小實驗:
使用計算器進行進制轉(zhuǎn)換。
打開計算機,點擊“查看”-->“程序員”。

在十進制下,輸入1000。

然后點擊二進制,結(jié)果如下:

注意:
1byte = 8bit 字節(jié)
1k = 1024byte
附:進制的基本轉(zhuǎn)換
①十進制 二進制 互轉(zhuǎn)
例如:
1011 = 1*2(0)+1*2(1)+0*(2)+1*2(3)= 1 + 2 + 0 + 8 = 11
附:括號中的數(shù)值代表次方。
②十進制 八進制 互轉(zhuǎn)
例如:
十進制 43
二進制 0101011
三位分割 010-101-110
八進制 2 5 6
因此,0101011 = 0256
結(jié)論:
八進制,其實就是二進制位,3個二進制位,1個八進制位。
③十進制 十六進制 互轉(zhuǎn)
十進制 43
二進制 0101011
四位分割 1010-1110
十六進制 10(A) 14(E)
因此,0101011 = 0AE
結(jié)論:
十六進制,其實就是二進制位,4個二進制位,1個十六進制位。
負數(shù)的二進制表現(xiàn)形式:
對應的正數(shù)二進制取反加1。
求-6的二進制表現(xiàn)形式:對應的正數(shù)6二進制取反加1。
0000-0110
取反 1111-1001
加1+0000-0001
-----------------
1111-1010
注意:
負數(shù)的二進制最高位永遠是1。
1.5. 變量
定義:內(nèi)存中的一個存儲區(qū)域,該區(qū)域有自己的名稱(變量名)和類型(數(shù)據(jù)類型),該區(qū)域的數(shù)據(jù)可以在同一類型范圍內(nèi)不斷變化。
用來不斷的存放同一類型的常量,并可以重復使用。
特點:變量其實就是將不確定的數(shù)據(jù)進行存儲。也就是需要在內(nèi)存中開辟一個空間。
定義變量的格式:
數(shù)據(jù)類型 變量名 = 初始化值;
例如:byte b = 3;
注意:
1、格式是固定的,記住格式,以不變應萬變。
2、變量的作用范圍(一對{}之間有效)。
理解:
變量就如同數(shù)學中的未知數(shù)X。
Java語言是強類型語言,對于每一種數(shù)據(jù)都定義了明確的具體數(shù)據(jù)類型,在內(nèi)存總分配了不同大小的內(nèi)存空間。
數(shù)據(jù)類型包括8種基本類型,3種引用類型。

注意:
整數(shù)默認類型:int類型,小數(shù)默認類型:double類型。
常見問題:
問題一:

錯誤原因:
由于整數(shù)默認類型是int類型,如果數(shù)值超過了int類型的范圍,那么就會報出如上錯誤。
即使是賦值給long類型的變量,但是后面的常量已經(jīng)超過了int類型的范圍,同樣會報錯。
解決方法:
在數(shù)值后面加上一個“l(fā)”,就可以讓編譯器知道后面的常量是long類型的。

問題二:

錯誤原因:
由于小數(shù)默認是double(8byte)類型,賦值給float(4byte)類型的變量,當然可能會損失精度。
解決方法:
在數(shù)值后面加上一個“f”,就可以讓編譯器知道后面的常量是float類型的。

問題三:

錯誤原因:
由于變量y是未初始化的,所以不能直接操作。
解決方法:
一定要為變量y先賦值,再打印輸出。
問題四:

錯誤原因:
由于變量z的作用范圍是在一對{}之間有效,超出這個范圍就失效了。所以,找不到z這個符號。
解決方法:
將大括號去掉,或者在大括號里面打印變量z。
1.6. 類型轉(zhuǎn)換
類型轉(zhuǎn)換在開發(fā)中也很常用,簡單來說就是類型之間相互的轉(zhuǎn)化,類型轉(zhuǎn)換共分兩種,自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。
1.6.1. 自動類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)
定義:自動類型轉(zhuǎn)換就是不需要我們手動對類型來進行強制轉(zhuǎn)換。
例如:

int類型的變量占4個字節(jié),當byte類型的變量與其相加的時候,首先會將byte類型的變量自動轉(zhuǎn)化為4個字節(jié)的int類型,然后再進行加法操作。
1.6.2. 強制類型轉(zhuǎn)換(顯式類型轉(zhuǎn)換)
定義:強制類型轉(zhuǎn)換需要把類型進行手動轉(zhuǎn)換,否則無法正常使用
例如:

錯誤原因:
當byte類型的變量提升為int類型與int類型的常量200相加后,結(jié)果依然是int類型。再賦值給byte類型,當然會出現(xiàn)損失精度的錯誤。
解決方法:
進行強制類型轉(zhuǎn)換,也就是將占4個字節(jié)的int類型值,再強硬存儲到占1個字節(jié)的byte變量中。

結(jié)果為-53的原因是,200+3結(jié)果是203,換算成占1個字節(jié)空間的二進制也就是11001011。
由于首位為1,所以是負數(shù),除符號位外,其余部分取反加1,得1,0110101,即-53。
注意:
1、只有數(shù)值類型才能進行加法操作,非數(shù)值類型不行!
例如:

2、char類型數(shù)據(jù)也可以和int類型相加,但是首先char類型數(shù)據(jù)會被自動提升為int類型。
例如:

字符類型數(shù)據(jù)之所以能夠自動提升為int類型是因為字符類型數(shù)據(jù)在計算機中也是用0、1表示的,int類型數(shù)據(jù)在計算機中也用0、1表示,當然可以轉(zhuǎn)換為int類型數(shù)據(jù)。
但是,字符類型數(shù)據(jù)在計算機中使用0、1是按照何種順序組合排列的則需要依據(jù)某個碼表而定。
Java中的內(nèi)置碼表是Unicode,既包含中文,也包含英文。
注意:
通過強轉(zhuǎn)也可以把數(shù)字強轉(zhuǎn)成字符。
例如:

表達式的數(shù)據(jù)類型自動提升
所有的byte型、short型和char的值將被提升到int型。
如果一個操作數(shù)是long型,計算結(jié)果就是long型;
如果一個操作數(shù)是float型,計算結(jié)果就是float型;
如果一個操作數(shù)是double型,計算結(jié)果就是double型。
面試難題:
說出報出如下錯誤的原因:

錯誤原因涉及到編譯器編譯程序時候的細節(jié):
之所以byte b = 3 +7;沒有報錯,是因為3和7都是常量,編譯器知道結(jié)果是10,并且在byte范圍之內(nèi),因此就自動進行了強轉(zhuǎn),所以不會報錯。
而b = b1 + b2;中b1和b2都是變量,編譯器編譯程序是一行一行編譯的,它根本不知道b1和b2到底是多少,兩個byte類型的數(shù)據(jù)相加時,首先都會被提升為int類型,他們的和也是int類型,其值可能會超過byte的范圍,因此就會報錯。
而如下程序則不會報錯:

原因是因為int類型的兩個變量相加,最后還是int類型,雖然結(jié)果溢出,但是不會報錯。

例子1:

注意:
整數(shù)與整數(shù)相除時,結(jié)果永遠是整數(shù),小數(shù)部分被忽略。
例子2:

注意:
負數(shù)對正數(shù)取模結(jié)果為負數(shù)。
正數(shù)對負數(shù)取模結(jié)果為正數(shù)。
例子3:

注意:
加號也可以作為連接符使用。
例子4:

注意:
例子4在計算機中的實際操作為:當執(zhí)行b = a++;語句時,先把a放在一個臨時內(nèi)存空間中,然后將a自加1,再將臨時內(nèi)存空間中的a賦值給b,因為b還是原來的a的值,也就是3。

注意:
當執(zhí)行b = ++a;語句時,先將a自加1,再將a賦值給b,因此b的值是4。