java學習系列(三)Java基本語法01

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。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容